UnrecognizedPropertyException: Unrecognized field 解决
转载请注明出处:
在项目得不同环境上对接外部的服务接口,且存在不同版本间可能有字段不同得问题,遇到这种问题在使用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; }