我有一个使用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批注?
答案 0 :(得分:0)
Jackson不知道像@NotNull
这样的Bean验证注释。对于“ null”的特定情况,可以将构造函数参数标记为@JsonProperty(required = true)
。更一般而言,您可以像以前一样在属性上使用@NotNull
,并用@Valid
标记MVC控制器参数(这不会导致反序列化失败,但是如果验证失败,则会导致Spring MVC返回400 )。
请注意,您可能还对UNWRAP_ROOT_VALUE
功能感兴趣,这将使您在这种特殊情况下无需使用包装器类。