我在网上读到了关于InitBinder但不太清楚它是如何工作的。根据我的理解,它可以用于执行横切 关注如设置验证器,将请求参数转换为某些自定义对象等
在网上看到了以下示例
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}
处理程序方法
public void handlerMethod(@RequestParam("date") Date date) {
}
优点是在DispatcherServlet调用handlerMethod之前,它将请求参数转换为Date对象(否则 开发人员必须执行handleMethod)。正确?
我的问题是spring如何知道哪个请求参数需要转换为Date对象?
说我的请求字符串是/someHandler/name?user=Brian&userCreatedDate=2011-01-01&code=aaaa-bb-cc
那么Spring怎么知道它必须转换userCreatedDate而不是其他两个参数,即代码/用户?
答案 0 :(得分:2)
它根据数据类型知道应用转换的请求参数。
通过这样做:
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
您正在注册Date
类型的编辑器。
所以,如果你有
@RequestMapping("/foo")
public String foo(@RequestParam("date") Date date,
@RequestParam("name") String name) {
// ...
}
然后编辑器将仅应用于第一个参数,因为第二个参数是String
而不是Date
。