转载请注明出处:
在项目得不同环境上对接外部的服务接口,且存在不同版本间可能有字段不同得问题,遇到这种问题在使用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; }
- UnrecognizedPropertyException Unrecognized fieldunrecognizedpropertyexception unrecognized field unrecognizedpropertyexception unrecognizedpropertyexception序列retrofit unrecognized time zone sqlexception unrecognized daemon configuration unrecognized incorrect time zone unrecognized represents unrecognized centos7 command centos unrecognized connection plaintext message 39 clicklocation unrecognized expecting