杰克逊将“null”字符串反序列化为预期的空请求体(尽管能够关闭此行为会很好)。
以下代码在“{}”有效负载的情况下触发验证,但在“null”有效负载的情况下不触发验证。这迫使我再次检查null有效负载,这对我来说似乎不正常,因为PayloadValidator可能包含空检查本身。
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.setValidator(new PayloadValidator());
}
@RequestMapping(method = POST, value = "/my/path/here")
public ResponseEntity<String> create(
@Validated @RequestBody Payload payload
) {
if (payload == null) {
// Payload validation logic not in one place
}
// useful work here
}
谢谢你, 以马内利
答案 0 :(得分:2)
@RequestBody
注释具有属性required
,默认情况下为true
,因此使用空主体的请求在此处不起作用,服务器应响应HTTP 400错误。< / p>
在这种情况下,"null"
有效负载实际上意味着请求正文不为空,并且Jackson会将其反序列化为null
值。在这种情况下,我认为@Validated
验证不会被触发,这会让您了解当前的安排。
正如您的问题所指出的,Spring Framework 4.2 +中已经使用SPR-13176解决了这个问题。