2017-04-07 10 views
0

나는 잭슨과의 매핑을 만드는 데 약간의 손실이 있습니다. 내 JSON은 다음과 같은 구조Jackson Json과 POJO 매핑

{ 
    "d": { 
    "__metadata": { 
     "uri": "https://apisalesdemo8.successfactors.com:443/odata/v2/JobApplication(1463L)", 
     "type": "SFOData.JobApplication" 
    }, 
    "lastName": "K", 
    "address": "123 Main Street", 
    "cellPhone": "12345", 
    "firstName": "Katrin", 
    "city": "Anytown", 
    "country": "United States", 
    "custappattachment": { 
     "results": [ 
     { 
      "__metadata": { 
      "uri": "https://apisalesdemo8.successfactors.com:443/odata/v2/Attachment(1188L)", 
      "type": "SFOData.Attachment" 
      }, 
      "fileExtension": "jpeg", 
      "fileName": "hp-hero-img.jpeg", 
      "fileContent": "/9j/4AA" 
     }, 
     { 
      "__metadata": { 
      "uri": "https://apisalesdemo8.successfactors.com:443/odata/v2/Attachment(1189L)", 
      "type": "SFOData.Attachment" 
      }, 
      "fileExtension": "jpeg", 
      "fileName": "hp-content-bkgd-img.jpeg", 
      "fileContent": "/9j/4AAQSk" 
     }]}}} 

내가 배열을 처리하는 튜토리얼을 많이 발견 할 수있다,하지만 난 바로 그 첫 번째 토큰 "D"로 이미 실패합니다. 및 "__metadata"토큰이 전혀 필요하지 않습니다.

lastName 등의 속성과 컬렉션 첨부 파일이 포함 된 pojo를 만들었습니다. 는하지만 내 코드는 항상 토큰 "d"또는 "__metadata"

public class ResponseDataObject { 


    private String lastName; 
    private String address; 
    private String cellPhone; 
    private String firstName; 
    private String city; 
    private String country; 
    private List<Attachment> attachments = new ArrayList<>(); 
    .....getters and setters 

와 어떤 힌트를 주시면 감사하겠습니다

ObjectReader objectReader = 
    mapper.readerFor(ResponseDataObject.class); 
    ResponseDataObject dataObject = objectReader.readValue(file); 

잭슨 리더에 실패합니다.

감사 마티아스는

답변

0

당신은 POJO에 존재하지 않는 속성을 무시해야합니다.

// for version 1.x  
mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
// for newer versions 
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) 

역 직렬화 코드 : ObjectMapper에 대한 DeserializationFeature에서 다음 속성을 설정

ObjectMapper mapper = new ObjectMapper(); 
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); 
ResponseDataObject dataObject = mapper.readValue(file, ResponseDataObject.class); 

및 ResponseDataObject 클래스에이 주석을 추가 : 당신은 속성을 무시 @JsonIgnoreProperties 주석을 사용할 수 있습니다

@JsonRootName(value = "d") 
class ResponseDataObject { 
+0

나는 그것을 시도했다. 그러나 모든 속성에 대해 null 값을 가지므로 올바르게 매핑되지 않았을까? –

+0

jsonvalue를 구문 분석하기 위해 약간 다른 코드를 사용하고 있습니다. 코드를 업데이트했습니다. 시도 해봐. –

+0

아니요, 결국 모든 것이 null입니다. –

0

그 클래스에 정의 된 멤버 중 하나와 일치하지 않습니다. 예 :

@JsonIgnoreProperties(ignoreUnknown = true) 
public class ResponseDataObject { 

이렇게하면 일치하는 모든 속성이 매핑되고 다른 속성이 무시됩니다.