初始化参数绑定器
由@InitBinder表示的方法,可以对WebDataBinder对象进行初始化。WebDataBinder是DataBinder的子类,用于完成由表单到JavaBean属性的绑定。
@InitBinder方法不能有返回值,它必须盛名为void。
@InitBinder方法的参数通常是WebDataBinder,
@InitBinder可以对WebDataBinder进行初始化。
例如:这里可以设置一个从网线打过来的日期 转换成date格式
@Controller public class FirstController { @InitBinder public void initBinder(WebDataBinder binder){ DateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); binder.registerCustomEditor(Date.class,new CustomDateEditor(sdf,true)); } @RequestMapping("/first") public String doFirst(String username, int age, Date birthday){ System.out.println(username); System.out.println(age); System.out.println(birthday); return "suecssful"; } }
下边是一个InitBinder的提升版本 上边的代码只能实现一种格式的匹配
/* * 自定义属性编辑器 继承propertiesEditor * */ public class EditorTest extends PropertiesEditor { public Date convert(String str) { SimpleDateFormat sdf = getDate(str); try { return sdf.parse(str); } catch (ParseException e) { e.printStackTrace(); } return null; }
//通过正则表达式去匹配网线打过来的字符串格式 public SimpleDateFormat getDate(String str) { SimpleDateFormat sdf=null; if(Pattern.matches("^\d{4}-\d{2}-\d{2}$",str)){ sdf=new SimpleDateFormat("yyyy-MM-dd"); } if(Pattern.matches("^\d{4}/\d{2}/\d{2}$",str)){ sdf=new SimpleDateFormat("yyyy/MM/dd"); } if(Pattern.matches("^\d{4}\d{2}\d{2}$",str)){ sdf=new SimpleDateFormat("yyyyMMdd"); } return sdf; } }
Controller的书写:
@Controller public class FirstController { @InitBinder public void initBinder(WebDataBinder binder){ DateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); binder.registerCustomEditor(Date.class,new CustomDateEditor(sdf,true)); } @RequestMapping("/first") public String doFirst(String username, int age, Date birthday){ System.out.println(username); System.out.println(age); System.out.println(birthday); return "suecssful"; } }