我有一个像这样的方法的@RestController
:
@GetMapping("/getInvoices")
public List<InvoiceDto> getInvoices(@RequestParam(name="date") @DateTimeFormat LocalDate date) {
// do stuff and return a list of InvoiceDtos
}
但是当JavaScript客户端发送http://localhost:8080/getInvoices?date=Thu+Nov+30+2017+00%3A00%3A00+GMT-0600+(Central+Standard+Time)等请求时
服务器报告:
2017-12-20 16:20:03.123 WARN 10324 --- [nio-9003-exec-7] .wsmsDefaultHandlerExceptionResolver:无法绑定请求元素:org.springframework.web.method.annotation.MethodArgumentTypeMismatchException:无法转换值'java.lang.String'类型为必需类型'java.time.LocalDate';嵌套异常是org.springframework.core.convert.ConversionFailedException:无法从类型[java.lang.String]转换为类型[@ org.springframework.web.bind.annotation.RequestParam @ org.springframework.format.annotation.DateTimeFormat java.time.LocalDate]的价值'星期四2017年11月30日23:20:02 GMT-0600(中央标准时间)';嵌套异常是java.lang.IllegalArgumentException:解析尝试失败的值[Thu Nov 30 2017 23:20:02 GMT-0600(Central Standard Time)]
如何将日期的String表示(忽略时间组件)转换为LocalDate?
尝试使用pattern
属性:
@DateTimeFormat(pattern="E MMM dd yyyy HH:mm:ss 'GMT'Z")