2017-09-25 2 views
0

Ich habe eine große Map<String, Object>, die der Rückgabetyp einer Feder RestController Aktion ist. Die Karte ist im Grunde String - String-Paare mit einem String - Map namens Kontext. Ich möchte die Ausgabe JSON in den Kontext der erste sortieren. Ich fand die @JsonPropertyOrder als eine Lösung, wenn das zurückgegebene Objekt Eigenschaften hat. Leider funktioniert es nicht mit meiner Map.Wie kann ich Json Eigenschaften in einer Feder sortieren 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; 
    } 
} 

Deshalb möchte ich die Ausgabe wie diese

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

statt dessen:

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

Sie können dies nicht mit HashMap tun, da es nicht die Reihenfolge verwaltet. Wenn Ihnen die Reihenfolge wichtig ist, können Sie LinkedHashMap oder eine andere Karte verwenden, die die Reihenfolge aufrechterhält. Überprüfen Sie, ob linkedHashMap funktioniert. – mlecz

+0

Würde diese Anmerkung nicht einfach dazu dienen, die Elemente * innerhalb von * 'context' zu alphabetisieren? – chrylis

+0

@mlecz - Thx, es hat mein Problem gelöst. – Sigee

Antwort

0

die Reihenfolge auf der übergeordneten angeben.

@JsonPropertyOrder ({ "Kontext", "Test", "test2"})

public class Foo {

Das Gleiche gilt für die alphabetische https://fasterxml.github.io/jackson-annotations/javadoc/2.3.0/com/fasterxml/jackson/annotation/JsonPropertyOrder.html

@JsonPropertyOrder (alphabetisch = true)

öffentliche Klasse Foo {

+0

Wie gesagt, ich habe kein benutzerdefiniertes Objekt mit Eigenschaften. Ich habe eine Map, daher konnte ich die JsonPropertyOrder für das übergeordnete Element nicht angeben. BTW: Ich habe ca. 4-500 String - String-Paare in meiner Karte. Ich möchte also nicht wirklich ein benutzerdefiniertes Objekt mit Eigenschaften erstellen. ;) – Sigee

Verwandte Themen