2014-07-11 72 views
-2

目前服務響應看起來像這樣的部分:傑克遜:只返回響應

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

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

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

但只是想發送的值數組作爲響應。像這樣

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

我可以在@JsonIgnoreProperties的幫助下取消元數據信息。但反應仍然如此:

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

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

      } 
     ] 
    } 

我該如何解決它?

+0

出了什麼問題,你有什麼現在? (元數據被壓抑)你有一個很好的對象表示。該對象將有一個稱爲值的字段,它將成爲JSON數組中表示的對象的列表。這正是您想與之合作的JSON風格。 –

+0

Consumer正在期待返回一個JSON數組。這個響應返回一個JSON對象。實際上,這是一個向後兼容性問題,所以不能指望消費者更改他們的代碼。 –

回答

1

使用the @JsonValue annotation很容易實現,它可以改變你的java類的表示。只需將一個註釋了該註解的方法添加到返回值集合的響應類中即可。這裏有一個例子:

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"]