2014-07-11 2 views
-2

현재 서비스 응답은 다음과 같습니다 응답의 한 부분 반환 :잭슨 :

{ 
    "values": [ 
     { 
      "field1": "value", 
      ................. 

     }, 
     { 
      "field1": "value", 
      ................. 

     } 
    ] 
    metadata1:[], 
    metadata2:"-" 
} 

을하지만, 단지 응답으로 값의 배열을 보내려고합니다. 이처럼

[ 
{ 
    "field1": "value", 
    ................. 
}, 
{ 
    "field1": "value", 
    ................ 
} 
] 

나는 @JsonIgnoreProperties의 도움으로 메타 데이터 정보를 표시 할 수 있습니다. 그러나 응답은 여전히 ​​이와 같습니다 :

{ 
     "values": [ 
      { 
       "field1": "value", 
       ................. 

      }, 
      { 
       "field1": "value", 
       ................. 

      } 
     ] 
    } 

어떻게 해결할 수 있습니까?

+0

? (메타 데이터가 억압 된 상태에서) 당신은 훌륭한 객체 표현을 가지고 있습니다. 객체에는 values라는 단일 필드가 있으며 JSON 배열에 표시된 객체의 목록입니다. 바로 JSON 스타일입니다. –

+0

소비자는 JSON 배열을 기다리고 있습니다. 이 응답은 JSON 객체를 반환합니다. 실제로이 이전 버전과의 호환성 문제는 소비자가 코드를 변경할 것으로 기대할 수 없습니다. –

답변

1

자바 클래스의 표현을 변경할 수있는 the @JsonValue annotation을 사용하면 쉽게 달성 할 수 있습니다. 이 주석으로 주석 된 메소드를 값 클래스를 리턴하는 응답 클래스에 추가하기 만하면된다. 다음은 그 예이다 :

public class JacksonValue { 
    public static class Bean { 
     private final List<String> values; 

     public Bean(List<String> values) { 
      this.values = values; 
     } 

     @JsonValue 
     public List<String> getValues() { 
      return values; 
     } 
    } 

    public static void main(String[] args) throws JsonProcessingException { 
     Bean bean = new Bean(Arrays.asList("a", "b", "c")); 

     ObjectMapper mapper = new ObjectMapper(); 
     System.out.println(mapper.writeValueAsString(bean)); 
    } 
} 

출력 : 현재 가지고있는 문제는 무엇

["a","b","c"]