2017-09-25 15 views
0

Spring RestControllerアクションの戻り値の型である巨大なMap<String, Object>があります。 マップは基本的にString - Stringという文字列と、contextというマップとのペアです。 出力jsonを最初のコンテキストにソートしたいと思います。 返されたオブジェクトにプロパティがある場合、解決策として@JsonPropertyOrderが見つかりました。残念ながら、それは私のマップで動作していません。Spring RestControllerのJsonプロパティを並べ替えるには

@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

その注釈は文脈の中で項目をアルファベット順に並べるとは言いませんか? – 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ため

同じもの(真=アルファベット)

public class Foo {

+0

私が言ったように私はプロパティを持つカスタムオブジェクトを持っていません。私はマップを持っているので、親にJsonPropertyOrderを指定することができませんでした。 ところで:私は地図にaprox 4-500文字列 - 文字列のペアを持っています。だから私は本当にプロパティを持つカスタムオブジェクトを作成したくありません。 ;) – Sigee

関連する問題