UnrecognizedPropertyException: Unrecognized field 解决
阅读原文时间:2023年10月20日阅读:1

转载请注明出处:

  在项目得不同环境上对接外部的服务接口,且存在不同版本间可能有字段不同得问题,遇到这种问题在使用jackson解析时,如果格式化得字符串与定义得java类不能完全对应时,就会报错:Unrecognized field ,代码还原:

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;

public class CounterEntity {
private long inoctets;

@JsonProperty("avg-bit-rate")  
private long avgBitRate;

@JsonProperty("avg-octet-rate")  
private long avgOctetRate;

public static void main(String\[\] args) {  
    ObjectMapper objectMapper = new ObjectMapper();  
    try {  
        String jsonStr = "{\\"pkts\\":0,\\"octets\\":0,\\"inpkts\\":0,\\"inoctets\\":0,\\"avg-bit-rate\\":0,\\"avg-octet-rate\\":0,\\"avg-packet-rate\\":0,\\"rt-bit-rate\\":0,\\"rt-octet-rate\\":0,\\"rt-packet-rate\\":0}";  
        CounterEntity entity = objectMapper.readValue(jsonStr, CounterEntity.class);  
        System.out.println(entity);  
    } catch (Exception e) {  
        e.printStackTrace();  
    }  
}  

}

  运行main方法,报错如下:

  解决方案,在转换得类上使用 这个注解 @JsonIgnoreProperties(ignoreUnknown = true) ,该注解会在解析的时候,会自动忽略一些不存在得属性。通过以下方式就可以正常得序列化和反序列化。

  @JsonIgnoreProperties是一个Jackson库提供的注解,用于标记在序列化和反序列化过程中需要忽略的属性。它可以应用于类级别和属性级别。 在类级别上使用@JsonIgnoreProperties注解,可以指定要忽略的属性列表。例如:

@JsonIgnoreProperties({"field1", "field2"})
public class MyClass {
private String field1;
private String field2;
private String field3;

@JsonIgnoreProperties  
private String field4;  

}