如何知道@JsonIgnoreProperties忽略了哪些所有属性(ignoreUnknown = true)

维沙尔

我需要序列化-在我的代码中反序列化现有的Java POJO。POJO很大+在层次结构中几乎没有父类。该代码使用spring,因此内部使用Jackson。我通过修复getter-setter名称(包括@JsonIgnore等)发现了一个问题,并且在相当长的时间后我将其完全修复。

但是我必须修复几个这样的类,因此对于下一个类,我只是添加了:@JsonIgnoreProperties(ignoreUnknown=true)可以工作,但是在测试期间我发现它忽略了一个不应忽略的属性。该属性就像

@JsonIgnoreProperties(ignoreUnknown=true)
class MyClass {
   private String xyz;
   public String getXyzValue() {
     return this.xyz;
   }
   public void setXyz(String xyz) {
     this.xyz = xyz;
   }
}

所以基本上我必须在这里更正getter方法。

问题:有什么方法可以使用,@JsonIgnoreProperties(ignoreUnknown=true)但列出所有被忽略的属性以进行进一步分析?

MichałZiober:

删除JsonIgnoreProperties注释并注册您自己的com.fasterxml.jackson.databind.deser.DeserializationProblemHandler问题处理程序。请参见以下示例:

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.deser.DeserializationProblemHandler;
import com.fasterxml.jackson.databind.json.JsonMapper;

import java.io.IOException;

public class JsonApp {

    public static void main(String[] args) throws IOException {
        String json = "{\"xyz\":\"X\",\"a\":1,\"yxz\":2}";
        DeserializationProblemHandler handler = new DeserializationProblemHandler() {
            @Override
            public boolean handleUnknownProperty(DeserializationContext ctxt, JsonParser p, JsonDeserializer<?> deserializer, Object beanOrClass, String propertyName) throws IOException {
                System.out.println("Unknown property '" + propertyName + "' for " + beanOrClass.getClass());
                return true;
            }
        };
        JsonMapper mapper = JsonMapper.builder()
                .addHandler(handler)
                .build();

        mapper.readValue(json, MyClass.class);
    }
}

上面的代码打印:

Unknown property 'a' for class com.example.MyClass
Unknown property 'yxz' for class com.example.MyClass

注意

JsonMapper类在version中引入2.10在此版本以下,您可以使用ObjectMapper构造函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

设置@JsonIgnoreProperties(ignoreUnknown = true)时,有没有办法检测未映射的json属性?

JSON.Net 相当于 Jackson 的 @JsonIgnoreProperties(ignoreUnknown = true)

如何检查是否等于A的所有属性B都为true?

杰克逊注释:JsonIgnoreProperties(ignoreUnknown = true)和JsonInclude(Include.NON_EMPTY)之间的区别

(true!= false!= true)与(false!= true!= false)有何区别?

如果其所有子级属性都为True,则将Parent属性推导为True。

TRUE和TRUE之间有区别吗?

删除具有delete:true属性的数组的所有元素

如何(false == false == true)为true

(true = true)的所有证明都相同吗?

提取所有True属性并添加到列表

通过xpath属性查找所有元素(aria-required = true)。//*[@ aria-required ='true']

True <2如何实现?

如何实现IF NOT TRUE

APP_DEBUG = true被忽略

Magento的distinct(true)子句被忽略

仅当for循环中的所有条件都为true时,才如何返回true?

如果所有结果相等,则返回true

orphanRemoval = true删除所有相关实体

装饰器使所有函数返回True

jQuery Toggle属性contentEditable =“ true”

值为“ true”的属性的名称

SomeValue {get;} = true;之间的区别;vs SomeValue => true; 在属性中

如果或语句没有在应该返回 true 时返回 true

while(true)和while(\ true)之间有什么区别?

RSpec中“ be_true”和“ be true”有什么区别

“ else:return True”和“ return True”有什么区别?

在R中-对于所有TRUE,所有随后的cols都是TRUE吗?

如何解释“ completionHandler(true)”