2010-11-17 29 views
13

Tengo un backend JAVA EE y estoy usando Spring MVC. Tengo una llamada AJAX como esta:Spring MVC -> respuesta JSON

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

Mi sistema de fondo:

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

Cuál es el contenido que tengo que poner en práctica lo que va a funcionar? En el sistema de fondo que tengo de una base de datos llamar a la identificación única y el nombre del proyecto, por ejemplo:

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

el ID y el nombre del proyecto debe ser devuelto al sistema de interfaz, por lo que se puede construir un HTML lista ul/li en este tipo:

<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> 

¿Alguien sabe cómo se puede hacer esto?

Respuesta

14

Es necesario:

  • Añadir Jackson JSON Mapper a la ruta de clase
  • Añadir <mvc:annotation-driven> a su configuración
  • Volver Map<Integer, String>

Para los casos más complejos cuando necesite configurar el proceso de asignación para cada método del manejador, puede usar MappingJacksonJsonView en lugar de @ResponseBody, como sugirió Stepen C.

+0

' 'faltaba en mi caso – Joram

+0

como referencia, creo que esta es una guía más detallada: http://blog.springsource.com/2010/01/25/ajax-simplifications-in-spring-3-0/ –

8

Debe leer el Capítulo 15.5 de la Guía del usuario de Spring, que describe cómo configurar las vistas MVC, y el Capítulo 16.10, que describe brevemente la Vista de mapeo JSON. A continuación, lea las javadocs para MappingJacksonJsonView etc.

8

También puede usar JSONArray y JSONObject de org.json para construir la salida JSON, luego, devolver un valor String como @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(); 
} 

Usted debe obtener algo como esto en el éxito de devolución de llamada de su petición Ajax.

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

Puede utilizar estos datos se agregue su li ul usando javascript o el uso de plantillas _underscore para hacer la interfaz de usuario.

+0

¿Es más eficiente esta solución? ¿O es mejor utilizar la función de Jackson writeValueAsString? –

Cuestiones relacionadas