使用 Spring @RestController处理具有 ZonedDateTime 参数的 HTTP GET

我正在创建一个终结点,该终结点将接收日期以在服务器端执行一些筛选。代码如下所示:

@RequestMapping(
        value = "/test",
        method = RequestMethod.GET,
        produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE}
)
@ResponseStatus(HttpStatus.OK)
public TestSummaryModel getTestSummaryByDate(
        @RequestParam ZonedDateTime start,
        @RequestParam ZonedDateTime end) {

    return testService.getTestBetween(start, end);

}

当我尝试调用我的端点时,我收到HTTP 400错误“客户端发送的请求语法不正确”。

我尝试过不同的日期格式,但没有一个有效。我错过了什么吗?我阅读了有关@DateTimeFormat但即使我添加了它,也不起作用。

@RequestParam @DateTimeFormat(pattern = "dd-MM-yyyy") ZonedDateTime start

这是我正在执行的请求的一个示例:

http://host/test-api/v1/test-summary/test?start=09-09-2015&end=09-09-2015

谢谢!


答案 1

@DateTimeFormat是你需要的。弹簧 MVC 4 具有适用于 的转换器。ZonedDateTime

但是,您需要提供适当的模式并发送适当的值。

以格式化为的日期提供的信息不足以生成 .dd-MM-yyyyZonedDateTime

尝试

@RequestParam("start") @DateTimeFormat(iso = ISO.DATE_TIME) ZonedDateTime start

并发送

...?start=2014-04-23T04:30:45.123Z

或者,使用不需要区域或时间信息的日期类型,并为 提供适当的日期格式。@DateTimeFormat


答案 2

推荐