如何使用@NotNull?

时间:2018-11-28 04:58:32

标签: java spring spring-mvc

我有一个使用Jackson的Spring Boot应用程序。我不只使用Jersey常规的Spring MVC。我有一个包装请求类:

public class WrapperRequest {
   @NotNull
   private final Object obj; // some object that corresponds with a JSON object
   @JsonCreator
   public WrapperRequest(@JsonProperty("wrapper") final Object obj) {
     this.obj = obj;
   }
   public Object getObj() {return obj}
}

此JSON如下:

 {
  "wrapper":{ 
    //Object data
  } 
 }

javax的@NotNull无法正常工作。我希望它的工作方式是,如果使用者发送的JSON中有错字,例如:

 {
  "wrapperr":{ 
    //Object data
  } 
 }

Jackson不会映射我的包装器类,因为JSON中的密钥与JsonProperty即(“ wrapper”)不匹配(因此Object将为null,然后如果我尝试与Object进行交互,则稍后会得到NPE。使用杰克逊(Jackson)错误吗?即杰克逊(Jackson)映射了它所知道的东西,其余的为null还是我没有正确使用@NotNull批注?

1 个答案:

答案 0 :(得分:0)

Jackson不知道像@NotNull这样的Bean验证注释。对于“ null”的特定情况,可以将构造函数参数标记为@JsonProperty(required = true)。更一般而言,您可以像以前一样在属性上使用@NotNull,并用@Valid标记MVC控制器参数(这不会导致反序列化失败,但是如果验证失败,则会导致Spring MVC返回400 )。

请注意,您可能还对UNWRAP_ROOT_VALUE功能感兴趣,这将使您在这种特殊情况下无需使用包装器类。