Spring 4 - 拒绝所有端点的“null”@RequestBody

时间:2015-08-26 08:55:02

标签: spring jackson spring-4

杰克逊将“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
}
  1. 是否有通用的方法完全拒绝null @RequestBody(即所有端点)?
  2. 如果没有,我可以在一个地方拥有所有验证逻辑并自动触发(即通过@Validated或@Valid)?
  3. 谢谢你, 以马内利

1 个答案:

答案 0 :(得分:2)

@RequestBody注释具有属性required,默认情况下为true,因此使用空主体的请求在此处不起作用,服务器应响应HTTP 400错误。< / p>

在这种情况下,"null"有效负载实际上意味着请求正文不为空,并且Jackson会将其反序列化为null值。在这种情况下,我认为@Validated验证不会被触发,这会让您了解当前的安排。

正如您的问题所指出的,Spring Framework 4.2 +中已经使用SPR-13176解决了这个问题。