为Spring 4 @RequestParam或@PathVariable注册自定义转换器的正确方法是什么

时间:2014-12-16 20:10:02

标签: java spring spring-mvc

我想弄清楚Spring 4中RequestParams和PathVariables的客户转换器的“最佳”或推荐方式是什么?我们注册了我们的杰克逊JSON转换器,但它们不适用于这些参数,通过在线阅读,我发现了大约十六个不同的答案。

我原本以为LocalDateTime可以在没有标准ISO格式的自定义转换器的情况下工作yyyy-MM-ddThh:mm:ss但是当我通过它时(2014-12-01T01:01:01)它只会引发异常,我尝试了不同的格式,看看这些是否有效,但到目前为止,我尝试过的格式都没有,所以我打算尝试自定义转换器,但我似乎无法找到正确的方法那是。

@RequestMapping(value = "/foo")
@RestController
public class TestController{
    @RequestMapping(value="/test", method=RequestMethod.GET)
    public void test(@RequestParam("stuff") LocalDateTime source) {
        int i = 0;
    }
}

以下是我尝试的示例网址http://localhost:8081/data/foo/test?start=1986-04-08T12:30:00

2 个答案:

答案 0 :(得分:5)

您案例的正确格式为

@RequestMapping(value="/test", method= RequestMethod.GET)
public void test(@RequestParam("stuff")  @DateTimeFormat(iso=ISO.DATE_TIME) LocalDateTime source) {
    int i = 0;
}

只要确定一件事,在您传递的价值中,并在问题2014-12-01T:01:01:01中说明您有错字,它应该是2014-12-01T01:01:01所以T01之间没有分号{1}}

答案 1 :(得分:0)

尝试查看Spring 3 Type Conversions and Validations引入的@DateTimeFormat参数注释:

@RequestMapping(value = "/appointments/{day}", method = RequestMethod.GET)
public String getAppointmentsForDay(@PathVariable @DateTimeFormat(iso=ISO.DATE) Date day) {
    ...
}