我正在使用LocalDateTime
控制器参数来接收日期:
@RequestMapping(
path = EspaiDocConstants.Endpoints.FO_BOINTERFACE_REQUEST_MAPPING_AUDITS,
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE
)
public Collection<Audit> listAudits(
@RequestParam(value = "deadline", required = false)
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
LocalDateTime deadline) {}
但是,它遇到"No primary or default constructor”
问题。
根据this workaround,为了避免这种情况,我需要添加以下代码:
@ModelAttribute
LocalDateTime initLocalDate() {
return LocalDateTime.now();
}
然后在我的@ModelAttribute
参数上添加deadline
:
public Collection<Audit> listAudits(
@RequestParam(value = "deadline", required = false)
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
@ModelAttribute
LocalDateTime deadline) {}
现在,它没有崩溃,但是无论参数值如何,我的deadline
参数值始终为LocalDateTime.now()
。我正在测试此请求:
https://localhost:8080/bo/audits?deadline=2000-10-31T01:30:00.000-05:00
有什么想法吗?
答案 0 :(得分:1)
使用方法级别的@ModelAttribute
注释,可以将方法的返回值隐式添加和绑定到每个请求方法的每个模型。因此,您不必在每个GET, POST, PUT
和DELETE
方法中都通过model.addAttribute(“ key”,value)添加对象。
因此对于您的用例,没有必要使用@ModelAttribute
注释的方法。
public Collection<Audit> listAudits(
@RequestParam(value = "deadline", required = false)
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
LocalDateTime deadline) { ... }
应该起作用。
但是也许有必要在请求参数客户端对冒号进行编码。