我有一个使用杰克逊的Spring应用程序。我使用的不是泽西岛,只是普通的Spring。我有一个包装请求类:
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不匹配,也就是说(“包装器”)(因此对象将为null,如果我试图与对象交互,那么我稍后将得到NPE )。我是不是用错了杰克逊?也就是说,Jackson映射了它所知道的事情,其余的都是空的,还是我没有正确地使用@NotNull注释?
发布于 2018-11-28 05:27:56
Jackson不知道Bean验证注释,比如@NotNull。对于"null“的特定情况,可以将构造函数参数标记为@JsonProperty(required = true)。更一般地,您可以像以前一样对属性使用@NotNull,并使用@Valid标记MVC控制器参数(这不会导致反序列化失败,但如果验证失败,则会导致Spring返回400 )。
请注意,您还可能对UNWRAP_ROOT_VALUE特性感兴趣,这将允许您在这种特殊情况下消除对包装类的需求。
https://stackoverflow.com/questions/53512416
复制相似问题