2016-11-08 1 views
0
Class EntityDataSet { 
     public List<EntityRow> getData() { 
     return rowList;  
} 

class EntityRow { 
     private Map<String, Object> rowData; 

     public Map<String, Object> getRowData() { 
     return rowData; 
    } 
} 

以下のような安静なコントローラにメソッドを書きました。春に返されたjson形式に関する問題は安らかですか?

@RequestMapping(value = "/entityData", method = RequestMethod.POST, headers = "Accept=application/json") 
public EntityDataSet getEntityData(@RequestBody QueryObject query) throws Exception{ 
    return entityManager.generateEntityDataByName(query); 
} 

返されるjsonは以下のようになります。

{ 
    "data": [ 
     { 
      "rowData": { 
       "FISCAL_YEAR_END": null, 
       "HOME_COUNTRY": null 
      } 
     }, 
     { 
      "rowData": { 
       "FISCAL_YEAR_END": null, 
       "HOME_COUNTRY": "10" 
      } 
     }, 
     .................. 

しかし、私が得たいものは以下のようなものです。

{ 
    "data": [ 
     { 
       "FISCAL_YEAR_END": null, 
       "HOME_COUNTRY": null 
     }, 
     { 
       "FISCAL_YEAR_END": null, 
       "HOME_COUNTRY": "10" 
     }, 

どうすれば実装できますか?ありがとう。

+0

それだけでアイデアを与え、immediatelly返すオブジェクトを取得し、JSON APIを使用して変換し、それを返すいけません。 –

+0

rowDataオブジェクトを返す代わりに2つのプロパティを持つEntityRowクラスに変更します。 – Lucky

+0

ハッシュマップのキーは変更されますが、固定されていません。 –

答えて

1

(ジャクソンを使用している場合)、それはあなたのEntityRowクラスで@JsonAnySetter@JsonAnyGetterアノテーションを使用して行うことができます。

import java.util.ArrayList; 
import java.util.List; 

import com.fasterxml.jackson.annotation.JsonProperty; 

public class EntityDataSet { 

    @JsonProperty("data") 
    private List<EntityRow> rowList; 

    /** 
    * @return the rowList 
    */ 
    public List<EntityRow> getRowList() { 
     return rowList; 
    } 

    /** 
    * @param rowList the rowList to set 
    */ 
    public void setRowList(List<EntityRow> rowList) { 
     this.rowList = rowList; 
    } 

    /** 
    * 
    * @param row 
    */ 
    public void add(EntityRow row){ 
     if(this.rowList == null){ 
      this.rowList = new ArrayList<EntityRow>(); 
     } 
     this.rowList.add(row); 
    } 
} 

これは、@JsonAnySetterと@JsonAnyGetter注釈

とEntityRowキークラスです
import java.util.Map; 

import com.fasterxml.jackson.annotation.JsonAnyGetter; 
import com.fasterxml.jackson.annotation.JsonAnySetter; 


public class EntityRow { 

    private Map<String, Object> rowData; 

    /** 
    * @param rowData the rowData to set 
    */ 
    @JsonAnySetter 
    public void setRowData(Map<String, Object> rowData) { 
     this.rowData = rowData; 
    } 

    @JsonAnyGetter 
    public Map<String, Object> getRowData() { 
     return rowData; 
    } 
} 

主は、それをテストする:

import java.util.HashMap; 
import java.util.Map; 
import com.fasterxml.jackson.core.JsonProcessingException; 
import com.fasterxml.jackson.databind.ObjectMapper; 

public class Test4 { 

    public static String getJsonString(Object o){ 
     ObjectMapper mapper = new ObjectMapper(); 

     //For testing 
     try { 
      //Convert object to JSON string 
      String jsonInString = mapper.writeValueAsString(o); 
      //System.out.println(jsonInString); 
      return jsonInString; 


     } catch (JsonProcessingException e){ 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    public static void main(String args[]){ 

     Map<String, Object> map = new HashMap<String, Object>(); 
     map.put("FISCAL_YEAR_END", null); 
     map.put("HOME_COUNTRY", null); 

     Map<String, Object> map2 = new HashMap<String, Object>(); 
     map2.put("FISCAL_YEAR_END", null); 
     map2.put("HOME_COUNTRY", "10"); 

     EntityRow row1 = new EntityRow(); 
     row1.setRowData(map); 

     EntityRow row2 = new EntityRow(); 
     row2.setRowData(map2); 

     EntityDataSet entityDataSet = new EntityDataSet(); 
     entityDataSet.add(row1); 
     entityDataSet.add(row2); 

     System.out.println(Test4.getJsonString(entityDataSet)); 
    } 
} 

最後に、これが出力されます:

{"data": 
      [ 
      { 
       "FISCAL_YEAR_END":null, 
       "HOME_COUNTRY":null 
      }, 
      { 
       "FISCAL_YEAR_END":null, 
       "HOME_COUNTRY":"10" 
      } 
      ] 
    } 
+0

ありがとうございます。しかし、私は '@ JsonProperty( "data")'は必要ではないことがわかりました。 –

関連する問題