spring InitBinder如何工作?

时间:2014-12-21 14:15:59

标签: java spring-mvc

我在网上读到了关于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而不是其他两个参数,即代码/用户?

1 个答案:

答案 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