使用@InitBinder添加自定义编辑器转换数据

SpringMVC在支持新的转换器框架的同时,也支持JavaBeans的PropertyEditor.可以在控制器中使用@InitBinder添加自定义的编辑器.
1.表单视图
    <form method="post" action="register">
        姓名<input type="text" name="loginname" />
        <br>
        生日<input type="text" name="birthday" />
        
        <input type="submit" />
    </form>
2.数据展示视图
<h3>loginname:${user.loginname}</h3>
<h3>birthday:<fmt:formatDate value="${user.birthday}" pattern="yyyy年MM月dd日" /></h3>
3.模型
public class User implements Serializable
{
    private String loginname;
    private Date birthday;
    
    public User()
    {
        super();
    }
...
4.Date类型编辑器
package org.fkit.converter;
import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateEditor extends PropertyEditorSupport
{
    @Override
    public void setAsText(String text) throws IllegalArgumentException
    {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        try
        {
            Date date = dateFormat.parse(text);
            setValue(date);
        } catch (ParseException e)
        {
            e.printStackTrace();
        }
    }
    
}
5.控制器
在UserController()方法中添加一个initBinder方法,并使用@InitBinde注释会在控制器初始化时注册属性编辑器.WebDataBinder对象用于处理请求消息和处理方法的绑定工作.binder.registerCustomEditor方法将传入的Dete类型使用DateEditor类进行转换.
@Controller
@RequestMapping("/user/")
public class UserController
{
    //在控制器初始化时注册属性编辑器
    @InitBinder
    public void initBinder(WebDataBinder binder)
    {
        //注册自定义编辑器
        binder.registerCustomEditor(Date.class, new DateEditor());
    }
    
    @RequestMapping("register")
    public String registor(
            )
    {
        return "user/register";
    }
    
    @RequestMapping(value="register",method=RequestMethod.POST)
    public String registerPost(
            @ModelAttribute User user,
            Model model
            )
    {
        model.addAttribute("user", user);
        return "user/sucess";
    }
    
}
成功将String转换为Date!