2010-04-09 10 views
6

Tengo una acción de resorte en la que estoy renderizando json del controlador, en el momento en que devuelve el tipo de contenido 'text/plain; charset = ISO-8859-1'.Marco de primavera de Java: cómo configurar el tipo de contenido?

¿Cómo puedo cambiar esto para que sea 'application/json'?

Gracias Jon

+0

Vea también esta respuesta a una pregunta similar: http://stackoverflow.com/a/11349642/66686 –

Respuesta

18

Pase el HttpServletResponse a su método de acción y establecer el tipo de contenido que hay:

public String yourAction(HttpServletResponse response) { 
    response.setContentType("application/json"); 
} 
+0

Hola, lo he intentado poner. Acabo de recibir el error "no se puede encontrar el símbolo símbolo: clase HttpServletResponse" cuando compilando –

+3

, ¿lo importó? 'import javax.servlet.http.HttpServeltResponse' – Bozho

+0

y tiene el servlet-api en su classpath – Bozho

2

Sí, pero esto sólo funciona si uno está impidiendo el HttpServletResponse en el controlador.

En Spring 3 se nos anima a evitar referencias a cualquier cosa en el dominio de servlet, manteniendo las cosas únicamente a nuestros POJO y anotaciones. ¿Hay alguna manera de hacerlo sin hacer referencia a HttpServletResponse? Es decir, guardándonos pure?

+1

Puede usar una implementación JSR-311 (JAX-RS), que proporciona un control explícito de los tipos de contenido mediante anotaciones. Aquí hay una discusión de aquellos: http://stackoverflow.com/questions/1710199/which-is-the-best-java-rest-api-restlet-or-jersey – FelixM

+1

Sí, puede usar el atributo "produce" de la anotación @RequestMapping, consulte http://stackoverflow.com/a/12023805/10433 para ver un ejemplo de configuración de la codificación de esta manera. –

5

¿Has intentado utilizar el MappingJacksonJsonView?

Spring-MVC Ver que representa contenido JSON serializando el modelo para la solicitud actual utilizando el ObjectMapper de Jackson.

Establece el tipo de contenido en: application/json.

+0

Heh, estaba haciendo manualmente lo que Spring me proporcionó. Gracias por el puntero :) – tmbrggmn

2
@RequestMapping(value = "jsonDemoDude", method = RequestMethod.GET) 
    public void getCssForElasticSearchConfiguration(HttpServletResponse response) throws IOException {   
     String jsonContent= ...; 
     HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper(response); 
     wrapper.setContentType("application/json;charset=UTF-8"); 
     wrapper.setHeader("Content-length", "" + jsonContent.getBytes().length); 
     response.getWriter().print(jsonContent); 
} 

También puede agregar los bytes X Adicionales o lo que sea para la parte "callback" en caso de que desee JSONP (JSON petición en sitios cruzados).

Cuestiones relacionadas