2017-04-06 2 views
1

jackson API에서 @JsonProperty을 사용하는 방법을 알고 있지만 아래의 경우가 다릅니다.이 경우 @JsonProperty 사용 방법 - 롬복을 사용하는 jackson API

아래 코드는 json snippet입니다. jackson API 위의 JSON으로 파싱 그래서

{"results":[{"uniqueCount":395} 

는, 나는 자바 POJO 클래스 아래에 작성했습니다.

package com.jl.models; 

import lombok.Data; 

@Data 
public class Results 
{ 
    private int uniqueCount; 

} 

나중에 json snippet과 유사한 구문을 파싱해야합니다.

{"results":[{"count":60} 

지금, 여기에 문제는 그것이 문자열 uniqueCount 기대로 Results 클래스와이 JSON을 구문 분석 할 수없는거야이다.

count 멤버 변수를 가진 다른 Java pojo 클래스를 쉽게 만들 수 있지만 Results 클래스의 인스턴스를 가진 모든 부모 Java 클래스를 만들어야합니다.

lombok 클래스를 사용자 정의하여 서로 영향을주지 않고 json을 구문 분석 할 수있는 방법이 있습니까?

미리 도움을 주셔서 감사합니다.

+0

당신은 Results''제거 단지 '목록을 사용하여 얻을 수있는 '를 , 단지'{ "results": [395]}'충분하지 않습니까? –

+0

오케이 ..이 제안에 감사드립니다. json을 파싱하기 위해 프론트 엔드에서'results' 객체를 많이 사용했습니다. 이제는 모든 위치에서 다시 작성해야합니다. 프론트 엔드에서 변경을 피하기 위해 json을 생성하는 동안 결과를 추가하여 수행 할 수있는 방법이 있습니까? – harshavmb

+0

'Count' 필드를 가진 또 다른'Results2' 클래스를 가질 수 있고, 역 직렬화 할 때 이들 클래스 중 하나를 사용하고 두번째 타입을 얻는다면 원래'Results'에 매핑 할 수 있습니다. 필자가 원래 제안한 것을 사용하기를 원하지만, 'uniqueCount' 필드는 구조체에 아무런 문제가 없으므로 문제가되는 것 같습니다. 또는이 -> http://stackoverflow.com/a/19566131/3641067 (끔찍한 보인다) –

답변

3

당신은 하나의 방법에 대한 모든 알 수없는 키를 직접 잭슨의 @JsonAnySetter 주석을 사용할 수 있으며 거기에 당신이 할당 스스로 수행 할 수 있습니다

@Data 
public class Results 
{ 
    private int uniqueCount; 

    // all unknown properties will go here 
    @JsonAnySetter 
    public void setUnknownProperty(String key, Object value) { 
     if (key.equals("count")) { 
      uniqueCount = (Integer)value; 
     } 
    } 
}