6.2.2 Spring支持的转换器 示例 使用InitBinder注解添加自定义编辑器转换数据
域对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import java.io.Serializable; import java.util.Date; public class User implements Serializable { private static final long serialVersionUID = 1L; private String loginname; private Date birthday; public User() { super(); } @Override public String toString() { return "User [loginname=" + loginname + ", birthday=" + birthday + "]"; } }
|
测试链接
1
| <a href="registerForm">registerForm</a>
|
请求处理方法
1 2 3 4 5 6
| @GetMapping(value = "/registerForm") public String registerForm() { return "registerForm"; }
|
表单
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <form action="register" method="post"> <table> <tr> <td> <label>登录名: </label> </td> <td> <input type="text" id="loginname" name="loginname"> </td> </tr> <tr> <td> <label>生日: </label> </td> <td> <input type="text" id="birthday" name="birthday"> </td> </tr> <tr> <td> <input id="submit" type="submit" value="登录"> </td> </tr> </table> </form>
|
填写表单并提交
表单处理方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| @InitBinder public void initBinder(WebDataBinder binder) { binder.registerCustomEditor(Date.class, new DateEditor()); } @PostMapping(value = "/register")
public String register(@ModelAttribute User user, Model mode) { System.out.println(user); mode.addAttribute("user", user); return "success"; }
|
并使用@InitBinde
注解,该注解会在控制器初始化时注册属性编辑器。WebDataBinder
对象用于处理请求消息和处理方法的绑定工作。binder.registerCustomEditor
()方法对传入的Date
类型使用DateEditor
类进行转换。
使用了@InitBinder
注解,不再需要在mvc:annotation-driven
标签中装配自定义转换器。
自定义属性编辑器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| 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(); } } }
|
显示效果