2016-06-27 8 views
0
{ 
    "customer": { 
    "ssoId":"B56789", 
    "brand":"123-reg", 
    "forename":"John", 
    "surname":"Doe", 
    "title":"Mr", 
    "companyName":"Unilever", 
    "primaryEmail":"[email protected]", 
    "currency":"$", 
    "language":"English", 
    "vatNumber":"D4531234", 
    "vatCode":"12B6", 
    "ipAddress":"127.0.0.1" 
    } 
} 

Das ist meine JSON-Datei Ich versuche, mit Apache Camel zu einem POJO zu entlarven, aber es wirft immer diesen Fehler! Wenn ich @JsonIngoreProperties hinzufüge, wird ein Null-Objekt zurückgegeben, ohne den POJO zu füllen.Parsing Json zu Java

@Data 
@JsonInclude(NON_EMPTY) 
public final class Customer{ 
    @JsonProperty(value = "ssoId", required = true) 
    private String ssoId; 

    @JsonProperty(value = "brand", required = true) 
    private String brand; 

    @JsonProperty(value = "forename", required = true) 
    private String forename; 
    //...... 
} 
Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: 
Unrecognized field "customer" (class com.heg.esb.model.Customer), not 
marked as ignorable (17 known properties: "addresses", "phones", 
"brand", "companyName", "ssoId", "ipAddress", "currency", "vatNumber", 
"vatCode", "title", "primaryEmail", "surname", "lastVerificationDate", 
"forename", "lastModifiedDate", "createdDate", "language"]) 
at [Source: [email protected]; line: 2, column: 16] (through reference chain: com.heg.esb.model.Customer["customer"]) 
at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:51) 
at com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:839) 
at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:1045) 
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1352) 
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1330) 
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:264) 
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:125) 
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3736) 
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2796) 
at org.apache.camel.component.jackson.JacksonDataFormat.unmarshal(JacksonDataFormat.java:173) 
at org.apache.camel.processor.UnmarshalProcessor.process(UnmarshalProcessor.java:69) 
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77) 
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460) 
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190) 
at org.apache.camel.processor.Pipeline.process(Pipeline.java:121) 
at org.apache.camel.processor.Pipeline.process(Pipeline.java:83) 
at org.apache.camel.processor.ChoiceProcessor.process(ChoiceProcessor.java:117) 
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77) 
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460) 
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190) 
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190) 
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109) 
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:87) 
at org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:112) 
+0

Es sieht so aus, dass es ein 'Kunden'-Feld in der 'Kunden'-Klasse gibt, ohne mit @JsonProperty oder @JsonIgnore versehen zu sein? – Wilson

+0

Das soll keine Eigenschaft sein, aber was ich in meinem Jsonpath innerhalb von Camel Blueprint verwenden muss, um sich mit POJO zu identifizieren, sollte es marschallieren. – Sammy65

+0

Oh! Ich habe gerade bemerkt, dass es doppelt markiert war. Nun, es war nicht so, wie ich den Link angesehen hatte, bevor ich ihn gepostet habe. Ich fragte, wie man die JSON-Datei oben in POJO umwandeln könnte, da JSON sich vor den geschweiften Klammern über den äußeren "Kunden" beschwerte, weil es eine Wrapper-Klasse benötigte, um zu verstehen, was mit der Datei zu tun ist. Ich benutzte diese Website, um meine Herausforderung zu lösen "http://www.jsonschema2pojo.org/" – Sammy65

Antwort

0

Sie müssen für jeden privaten Feld Sie versuchen, den öffentlichen Setter in der POJO haben müssen Jackson bevölkern.

Außerdem müssen Sie in der @ JsonProperty-Annotation nicht "value" angeben, wenn sie mit dem Feldnamen übereinstimmt.

+0

Die @Data von Lombok stellt die Getter und Setter automatisch zur Verfügung. Ich konnte den "erforderlichen" Parameter nicht ohne den einschließen. – Sammy65