2016-06-27 90 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" 
    } 
} 

这就是我的JSON文件我试图使用Apache骆驼解组POJO,但它一直抛出该错误!当我添加@JsonIngoreProperties时,它会返回一个空对象而不填充POJO。解析Json到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

看起来像'Customer'类中有'customer'字段,没有使用@JsonProperty或@JsonIgnore注释? – Wilson

+0

这并不意味着它是一个属性,但我需要在我的Jsonpath中使用骆驼蓝图来识别POJO。 – Sammy65

+0

哦!我只注意到它被标记为重复。那么,这不是我在发布之前添加的链接。我在问如何将上面的JSON文件转换为POJO,因为JSON在花括号之前抱怨外面的“客户”,因为它需要一个包装类来理解如何处理文件。我用这个网站来解决我的挑战“http://www.jsonschema2pojo.org/” – Sammy65

回答

0

您必须对POJO公共setter方法你想拥有的杰克逊填充每个私有字段。

另外,如果与字段名称相同,则不需要在@JsonProperty注释中指定“值”。

+0

lombok的@Data自动提供getter和setter。没有这个,我不能包含“required”参数。 – Sammy65