2013-09-24 7 views
5

Ich muss eine Karte zurück an die Webanwendung übergeben.JSONObject Alternative im Frühjahr und Jackson

Ich bin es gewohnt, die Karte in einem JSONObject

http://json.org/java/

zu Einkapseln Aber da ich mit Spring und Jackson Hause.

Gibt es einen einfacheren Weg, den pojo zu erhalten? Darf ich den MAP einfach kommentieren?

+1

Also in Ihrem Projekt haben Sie Jackson zur Verfügung rechts ... dann, wenn Sie die Karte aus dem Controller mit @ResponseBody Annotation dann wird es automatisch umgewandelt in ein JSON-Objekt von Feder-Konverter –

+0

Ich werde die Karte in a POJO mit model.addAttribute ("pojo", pojo) – user4127

Antwort

2

Wenn Sie die Ausgabe manipulieren müssen, das heißt, Sie wollen nicht alle Felder des Objekts zur Verfügung zu stellen Sie JSonArray verwenden können:

@RequestMapping(value = "/api/users", method = RequestMethod.GET) 
public 
@ResponseBody 
String listUsersJson(ModelMap model) throws JSONException { 
    JSONArray userArray = new JSONArray(); 
    for (User user : userRepository.findAll()) { 
     JSONObject userJSON = new JSONObject(); 
     userJSON.put("id", user.getId()); 
     userJSON.put("firstName", user.getFirstName()); 
     userJSON.put("lastName", user.getLastName()); 
     userJSON.put("email", user.getEmail()); 
     userArray.put(userJSON); 
    } 
    return userArray.toString(); 
} 

Verwenden Sie das Beispiel von here

Andernfalls, wenn Sie fügen jackson zu Ihren Abhängigkeiten hinzu und legen die Controller-Methode fest, die mit gekennzeichnet ist. Die Antwort wird automatisch JSON zugeordnet. Überprüfen Sie here für ein einfaches Beispiel.

+0

entschuldigen Sie mich, aber wenn es eine Anfrage senden (weiß nicht den eigentlichen Begriff) .. es wird mich nicht auf eine andere Seite weiterleiten. – user4127

5

Jackson hat com.fasterxml.jackson.core.JsonNode und spezifische Subtypen wie ObjectNode. Diese bilden so genannte Tree Model, die eine von 3 Möglichkeiten ist, JSON mit Jackson zu behandeln - einige andere Bibliotheken (wie org.json) bieten nur diesen Weg.

Sie sollten also stattdessen verwenden können; Es ist wenig sinnvoll, org.json Bibliothek zu verwenden; Es ist langsam und hat eine veraltete API.

Alternativ können Sie einfach java.util.Map verwenden und das zurückgeben. Jackson kann Standard List s, Map s und andere JDK-Typen gut behandeln.

+0

Ich habe Map verwendet, aber die Rückgabe des Objekts ist kein JSON-Objekt. – user4127