Spring mvc @initBinder 类型转化器的使用

一.单日期格式

因为是用注解完完成的后台访问,所以必须在大配置中配置包扫描器;

1.applicactionContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
     xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        ">

   <!-- 配置包扫描器-->
       <context:component-scan base-package="cn.happy.controller"></context:component-scan>
</beans>

2.配置类

package cn.happy.controller;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
     @Controller
    public class FirstController {
         /**
          * @param binder
          */

        @InitBinder
        public void initBinder(WebDataBinder binder){
            //PropertyEditor
            //类  implements  PropertyEditor
            binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
        }
        @RequestMapping("/first.do")
        //类型转化工作一定是在真正的handler方法执行前执行的。
        public String doFirst(Date birthday,int age) throws Exception{
            System.out.println(birthday+"===============");
            System.out.println(age+"===============");
            return "/WELCOME.jsp";
        }

    }

3.前台

    <form action="${pageContext.request.contextPath }/first.do" method="post">
                 出生日期:<input name="birthday"/><br/><br/>
                 年龄:<input name="age"/><br/><br/>
       <input type="submit" value="注册"/>
    </form>

二:多日期格式

1.因为并不是一种格式,所以我们可以把能进转换的格式提到一个类中

package cn.happy.controller;

import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.regex.Pattern;

import org.springframework.beans.TypeMismatchException;
import org.springframework.beans.propertyeditors.PropertiesEditor;

public class MyDateEditor extends PropertiesEditor{
     @Override
    public void setAsText(String source) throws IllegalArgumentException {

      SimpleDateFormat sdf=getDate(source);
      //做一个操作
      try {
		setValue(sdf.parseObject(source));
	} catch (ParseException e) {
		e.printStackTrace();
	}

    }

	private SimpleDateFormat getDate(String source) {
		SimpleDateFormat sdf=null;
		if (Pattern.matches("^\\d{4}-\\d{2}-\\d{2}$", source)) {
			sdf=new SimpleDateFormat("yyyy-MM-dd");
		}else if (Pattern.matches("^\\d{4}/\\d{2}/\\d{2}$", source)) {
			sdf=new SimpleDateFormat("yyyy/MM/dd");
		}else if (Pattern.matches("^\\d{4}\\d{2}\\d{2}$", source)) {
			sdf=new SimpleDateFormat("yyyyMMdd");
		}else {
			throw new TypeMismatchException("", Date.class);
		}

		return sdf;
	}

}

2、还是用@initBinder 注解处理类型

package cn.happy.controller;

import java.beans.PropertyEditor;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.beans.propertyeditors.PropertiesEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
     @Controller
	public class FirstController {
    	 /**
    	  *
    	  * @param binder
    	  */
    	 @InitBinder
    	public void initBinder(WebDataBinder binder){
    		binder.registerCustomEditor(Date.class,new MyDateEditor());
    		System.out.println("===============11111");

    	}

		@RequestMapping("/first.do")
		//类型转化工作一定是在真正的handler方法执行前执行的。
		public String doFirst(Date birthday,int age) throws Exception{
			System.out.println(birthday+"===============");
			System.out.println(age+"===============");
			return "/WELCOME.jsp";
		}

	}
时间: 2024-11-15 00:06:45

Spring mvc @initBinder 类型转化器的使用的相关文章

spring mvc 方法注解拦截器

应用场景,在方法级别对本次调用进行鉴权,如api接口中有个用户唯一标示accessToken,对于有accessToken的每次请求可以在方法加一个拦截器,获得本次请求的用户,存放到request或者session域. python中,之前在python flask中可以使用装饰器来对方法进行预处理,进行权限处理 先看一个实例,使用@access_required拦截: @api.route('/post_apply') @access_required def apply():     "&q

spring mvc中的拦截器小结 .

在spring mvc中,拦截器其实比较简单了,下面简单小结并demo下. preHandle:预处理回调方法,实现处理器的预处理(如登录检查),第三个参数为响应的处理器(如我们上一章的Controller实现):      返回值:true表示继续流程(如调用下一个拦截器或处理器):              false表示流程中断(如登录检查失败),不会继续调用其他的拦截器或处理器,此时我们需要通过response来产生响应: postHandle:后处理回调方法,实现处理器的后处理(但在渲

jQuery源码分析系列(36) : Ajax - 类型转化器

什么是类型转化器? jQuery支持不同格式的数据返回形式,比如dataType为 xml, json,jsonp,script, or html 但是浏览器的XMLHttpRequest对象对数据的响应只有 responseText与responseXML 二种 所以现在我要定义dataType为jsonp,那么所得的最终数据是一个json的键值对,所以jQuery内部就会默认帮你完成这个转化工作 jQuery为了处理这种执行后数据的转化,就引入了类型转化器,如果没有指定类型就依据响应头Con

Spring MVC 返回类型为字符串时, 返回中文变成&quot;?&quot;处理

Spring MVC 返回类型为字符串时, 返回中文变成"?"处理 Spring controller 如下 @Controller public class SimpleController { @ResponseBody @RequestMapping(value = "/hotel") public String hotel() { return "{\"status\":0,\"errmsg\":null,\

spring mvc 能过拦截器记录请求数据和响应数据

spring mvc 能过拦截器记录请求数据记录有很多种方式,主要有以下三种: 1:过滤器 2:HandlerInterceptor拦截器 3:Aspect接口控制器 但是就我个人所知要记录返回的数据,只能通过Aspect处理,以下是实现此需要的代码 package com.qmtt.config; import java.util.Arrays; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annot

Spring MVC中的拦截器/过滤器HandlerInterceptorAdapter的使用

一般情况下,对来自浏览器的请求的拦截,是利用Filter实现的 而在Spring中,基于Filter这种方式可以实现Bean预处理.后处理. 比如注入FilterRegistrationBean,然后在这个Bean上传递自己继承Filter实现的自定义Filter进入即可. 而Spring MVC也有拦截器,不仅可实现Filter的所有功能,还可以更精确的控制拦截精度. Spring MVC提供的org.springframework.web.servlet.handler.HandlerInt

关于spring mvc时间类型绑定失败解决方法

前端页面用的easyui,有个日期字段: <input name="sdt" class="easyui-datebox" value=" <fmt:formatDate value="${entity.sdt }" pattern="yyyy-MM-dd" />"/> 后台用的spring mvc框架: 在保存这个表单对象时,可以直接save这个表单bean的,但是对于日期类型,可

Spring MVC之视图解析器

Spring MVC提供的视图解析器使用ViewResolver进行视图解析,实现浏览器中渲染模型.ViewResolver能够解析JSP.Velocity模板.FreeMarker模板和XSLT等多种视图. Spring处理视图最重要的两个接口是ViewResolver和View.ViewResolver接口在视图名称和真正的视图之间提供映射关系: 而View接口则处理请求将真正的视图呈现给用户. 1.ViewResolver视图解析器 在Spring MVC控制器中,所有的请求处理方法(Ac

[Spring MVC] - InitBinder验证

Spring MVC使用InitBinder验证: 使用InitBinder做验证的情况一般会在此Controller中提交的数据需要有一些是业务性质的,也即比较复杂的验证情况下才会使用.大部份简单的表单验证,使用annotation验证即可以解决. Annotation验证使用方法可参见:http://www.cnblogs.com/HD/p/4123146.html 这里需要注意的一点:InitBinder和Annotation两种验证只能二选一,如果使用了InitBinder,就不能使用A