2010-11-17 4 views
13

J'ai un backend JAVA EE et j'utilise Spring MVC. J'ai un appel AJAX comme ceci:Spring MVC -> réponse JSON

function getAllProjects() { 
     $.getJSON("project/getall", function(allProjects) { 
      ??? 
     }); 
    } 

Mon système back-end:

@RequestMapping(value="/getall", method=RequestMethod.GET) 
public @ResponseBody ??? getAllProjects() { 
    ??? 
} 

Quel est le contenu que je dois la mettre en œuvre fonctionnera donc? Dans le système de back-end je d'une base de données appeler l'identifiant unique et le nom du projet, par exemple:

1 => My Test Project 
4 => Another One 
23 => One More Test 

L'identifiant et le nom du projet doit être retourné au système frontend, donc je peux construire un HTML ul/li liste de ce genre:

<ul> 
    <li><a href="/1">My Test Project</a></li> 
    <li><a href="/4">Another One</a></li> 
    <li><a href="/23">One More Test</a></li> 
</ul> 

Est-ce que quelqu'un sait comment cela peut-il être fait?

Répondre

14

Vous devez:

  • Ajouter Jackson JSON Mapper au classpath
  • Ajouter <mvc:annotation-driven> à votre config
  • Retour Map<Integer, String>

Pour les cas plus complexes lorsque vous devez configurer le processus de mappage pour chaque méthode de gestionnaire, vous pouvez utiliser MappingJacksonJsonView au lieu de @ResponseBody, comme Stepen C l'a suggéré.

+0

' 'manquait dans mon cas – Joram

+0

pour référence, je pense que c'est un guide plus détaillé: http://blog.springsource.com/2010/01/25/ajax-simplifications-in-spring-3-0/ –

8

Vous devez lire le chapitre 15.5 du Guide de l'utilisateur de Spring qui décrit comment configurer les vues MVC et le chapitre 16.10 qui décrit brièvement la vue de mappage JSON. Ensuite, lisez les javadocs pour MappingJacksonJsonView etc.

8

Vous pouvez également utiliser JSONArray et JSONObject de org.json pour construire la sortie JSON, puis renvoyer une valeur String en tant que @ResponseBody.

http://www.json.org/javadoc/org/json/JSONObject.html

@RequestMapping(value="/getall", method=RequestMethod.GET) 
public @ResponseBody String getAllProjects() { 
    ... 
    JSONArray jsonItems = new JSONArray(); 

    JSONObject jsonItem1 = new JSONObject(); 
    jsonItem1.put("id", "1"); 
    jsonItem1.put("name", "My Test Project"); 

    JSONObject jsonItem2 = new JSONObject(); 
    jsonItem2.put("id", "4"); 
    jsonItem2.put("name", "Another one"); 

    jsonItems.put(jsonItem1); 
    jsonItems.put(jsonItem2); 

    return jsonItems.toString(); 
} 

Vous devriez obtenir quelque chose comme ça dans votre rappel de succès de la demande ajax.

[{ 
    "id":"1", 
    "name":"My Test Project" 
},{ 
    "id":"4", 
    "name":"Another one" 
}] 

Vous pouvez utiliser ces données pour ajouter soit votre ul li en utilisant javascript ou à l'aide de templating _underscore pour rendre votre interface utilisateur.

+0

Est plus efficace cette solution? Ou est préférable d'utiliser la fonction Jackson writeValueAsString? –