2017-09-25 44 views
0

我有一個巨大的Map<String, Object>,這是一個spring RestController動作的返回類型。 該地圖基本上是String - String與String - Map的上下文對。 我想排序輸出json的上下文是第一個。 當返回的對象具有屬性時,我找到了@JsonPropertyOrder作爲解決方案。不幸的是,它不適合我的地圖。如何排序彈簧中的Json屬性RestController

@RestController 
public class MyController { 

    @RequestMapping("/test.json") 
    @JsonPropertyOrder(value = {"context"}, alphabetic = true) 
    public Map<String, Object> response() { 
     Map<String, String> context = new HashMap<>(); 
     context.put("environment", "dev"); 
     Map<String, Object> myMap = new HashMap<>(); 
     myMap.put("context", context); 
     myMap.putAll(fillMyMap()); 
     return myMap; 
    } 

    private Map<String, String> fillMyMap() { 
     Map<String, String> myMapFillValues = new HashMap<>(); 
     myMapFillValues.put("test", "foo"); 
     myMapFillValues.put("test2", "bar"); 
     return myMapFillValues; 
    } 
} 

所以,我想這樣的

{ 
    "context": { 
     "environment": "dev" 
    }, 
    "test": "foo", 
    "test2": "bar" 
} 

而不是此輸出:

{ 
    "test": "foo", 
    "test2": "bar", 
    "context": { 
     "environment": "dev" 
    } 
} 
+1

你不能用HashMap來做到這一點,因爲它沒有維護順序。如果您關心訂單,您可以嘗試LinkedHashMap或維護訂單的其他地圖。檢查linkedHashMap是否可以工作 – mlecz

+0

這個註解是不是僅僅說明* * context中的項* *? – chrylis

+0

@mlecz - Thx,它解決了我的問題。 – Sigee

回答

0

指定父的順序。

@JsonPropertyOrder({ 「上下文」, 「測試」, 「TEST2」})

公共類Foo {爲字母 https://fasterxml.github.io/jackson-annotations/javadoc/2.3.0/com/fasterxml/jackson/annotation/JsonPropertyOrder.html

@JsonPropertyOrder

同樣的事情(字母=真)

公共類Foo {

+0

正如我所說我沒有任何具有屬性的自定義對象。我有一個Map,所以我無法在父級上指定JsonPropertyOrder。 順便說一句:我有aprox 4-500字符串 - 我的地圖中的字符串對。所以我不想用屬性創建一個自定義對象。 ;) – Sigee