使用 Spring @RestController 处理带 ZonedDateTime 参数的 HTTP GET
Using Spring @RestController to handle HTTP GET with ZonedDateTime parameters
我正在创建一个端点,它将接收日期以在服务器端进行一些过滤。代码如下所示:
@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 错误 "The request sent by the client was syntactically incorrect."
我尝试了不同的日期格式,但 none 都有效。我错过了什么吗?我阅读了有关 @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
谢谢!
@DateTimeFormat
就是您所需要的。 Spring MVC 4 具有适合 ZonedDateTime
的转换器。
但是,您需要提供适当的模式并发送适当的值。
格式为 dd-MM-yyyy
的日期中提供的信息不足以生成 ZonedDateTime
。
尝试
@RequestParam("start") @DateTimeFormat(iso = ISO.DATE_TIME) ZonedDateTime start
并发送
...?start=2014-04-23T04:30:45.123Z
或者,使用不需要时区或时间信息的日期类型,并为 @DateTimeFormat
提供适当的日期格式。
我正在创建一个端点,它将接收日期以在服务器端进行一些过滤。代码如下所示:
@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 错误 "The request sent by the client was syntactically incorrect."
我尝试了不同的日期格式,但 none 都有效。我错过了什么吗?我阅读了有关 @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
谢谢!
@DateTimeFormat
就是您所需要的。 Spring MVC 4 具有适合 ZonedDateTime
的转换器。
但是,您需要提供适当的模式并发送适当的值。
格式为 dd-MM-yyyy
的日期中提供的信息不足以生成 ZonedDateTime
。
尝试
@RequestParam("start") @DateTimeFormat(iso = ISO.DATE_TIME) ZonedDateTime start
并发送
...?start=2014-04-23T04:30:45.123Z
或者,使用不需要时区或时间信息的日期类型,并为 @DateTimeFormat
提供适当的日期格式。