Java 객체에 매핑되는 JSON 객체가 있습니다. JSON은 Java Object가 처리하는 중첩 데이터를 포함합니다. 내 경우는 크기 때문에 내가 시도하고있는 것의 예로서 축소 된 버전을 사용할 것이다.Jackson Java 객체 매핑이 존재하지 않는 '알려진 속성'을보고하지 못합니다.
내 JSON 데이터는 다음과 같습니다 : 데이터 필드가 더 JSON 오브젝트의 목록을 보유하고
{"name":"wmi", "data": [{"ip":"192.168.1.50", "L2CacheSize":"1024", "L2CacheSpeed":"0"}, {"ip":"192.168.1.51", "L2CacheSize":"1024", "L2CacheSpeed":"0"}] }
.
public class WmiData {
private String name;
private List<Computer> data;
//Getters and Setters...
//Constructor
public WmiData(String name, List<Computer> computers) {
this.name = name;
this.data = computers;
}
static class Computer {
private String ip;
private Integer L2CacheSize;
private Integer L2CacheSpeed;
public Computer(String ip, Integer L2CacheSize, Integer L2CacheSpeed) {
this.ip = ip;
this.L2CacheSize = L2CacheSize;
this.L2CacheSpeed = L2CacheSpeed;
}
//Getters and Setters...
}
}
와 나는이 같은 간단한 매핑하고있는 중이 야 : 이것은 다음과 같습니다 내 자바 객체에 잭슨을 통해 매핑되는
그러나ObjectMapper mapper = new ObjectMapper();
WmiData data = mapper.readValue(jsonString, WmiData.class);
을, 구문 분석 오류를주고 실패
SEVERE: Failure to convert json to object:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "L2CacheSize" (class company.Data.Wmi$Computer), not marked as ignorable (3 known properties: , "ip", "l2CacheSize", "l2CacheSpeed")
at [Source: {"data":[{"L2CacheSize":"1024","ip":"192.168.1.50","L2CacheSpeed":"0"}, {"L2CacheSize":"1024","ip":"192.168.1.51","L2CacheSpeed":"0"}],"name":"wmi"}; line: 1, column: 26] (through reference chain: company.Data.Wmi["data"]->company.Data.Computer["L2CacheSize"])
at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:79)
at com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:568)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:649)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:830)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:310)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:112)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:226)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:203)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:23)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:338)
at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:87)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:290)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:112)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2563)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:1805)
at uk.co.humboldt.Sums.Service.MessageHandler.getPoll(MessageHandler.java:93)
at uk.co.humboldt.Sums.Service.MessageHandler.pollWmi(MessageHandler.java:147)
at uk.co.humboldt.Sums.Service.MessageHandler.pollServices(MessageHandler.java:105)
at uk.co.humboldt.Sums.Service.MessageHandler.lambda$new$0(MessageHandler.java:72)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
위의 오류는 Jackson이 알고있는 세 가지 속성, 예를 들어 ip
, l2CacheSize
및 l2CacheSpeed
만 인식한다는 것을 설명합니다. 그 중 두 가지가 내 존재하지 않습니다 객체 정의. 내 필드는 L2CacheSize
이고 L2CacheSpeed
입니다. 둘 다 대문자 'L'을 적어 두십시오. 그것이 호환되지 않는 것이라고 불평하는 데이터 소스는 들어오는 데이터가 Java Object에서 설명한 것과 정확히 같은 형식이지만 아직 실패했다는 것을 명확하게 보여줍니다.
무엇이 문제 일 수 있습니까?
도움을 주시면 감사하겠습니다.
L2CacheSize는 문자열이며 int로 매핑 한 후 문자열 유형으로 변경합니다. –