Tengo el requisito de devolver el resultado de la base de datos como una cadena en xml-structure o como json-structure. Tengo una solución, pero no sé, si esta es la mejor manera de resolver esto. Tengo dos métodos aquí:spring mvc rest response json y xml
@RequestMapping(value = "/content/json/{ids}", method = RequestMethod.GET)
public ResponseEntity<String> getContentByIdsAsJSON(@PathVariable("ids") String ids)
{
String content = null;
StringBuilder builder = new StringBuilder();
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.add("Content-Type", "text/html; charset=utf-8");
// responseHeaders.add("Content-Type", "application/json; charset=utf-8");
List<String> list = this.contentService.findContentByListingIdAsJSON(ids);
if (list.isEmpty())
{
content = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><error>no data found</error>";
return new ResponseEntity<String>(content, responseHeaders, HttpStatus.CREATED);
}
for (String json : list)
{
builder.append(json + "\n");
}
content = builder.toString();
return new ResponseEntity<String>(content, responseHeaders, HttpStatus.CREATED);
}
@RequestMapping(value = "/content/{ids}", method = RequestMethod.GET)
public ResponseEntity<String> getContentByIdsAsXML(@PathVariable("ids") String ids)
{
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.add("Content-Type", "application/xml; charset=utf-8");
String content = this.contentService.findContentByListingIdAsXML(ids);
if (content == null)
{
content = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><error>no data found</error>";
return new ResponseEntity<String>(content, responseHeaders, HttpStatus.CREATED);
}
return new ResponseEntity<String>(content, responseHeaders, HttpStatus.CREATED);
}
para el primer método que necesito una solución mejor, que ya le pregunté aquí: spring mvc rest mongo dbobject response
El siguiente paso es, que me inserta en la configuración de un convertidor de JSON :
<bean id="jsonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes" value="application/json"/>
</bean>
cuando cambio el tipo de contenido en el primer método de "application/json", funciona, pero entonces la respuesta XML ya no funciona, debido a que el convertidor de JSON quiere convertir la cadena XML a json-structure, creo.
¿qué puedo hacer, ese resorte identifica la diferencia de que un método debe devolver un tipo json y el otro un xml normal como cadena? lo probé con la bandera aceptar:
@RequestMapping(value = "/content/json/{ids}", method = RequestMethod.GET, headers = "Accept=application/json")
pero esto no funciona. Me sale el siguiente error:
org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.StackOverflowError
Espero que alguien me pueda ayudar.
No. Automáticamente devuelve xml ... – Jan
Si tiene el tipo de devolución para el método establecido en '@ResponseBody MyObject' y tiene los Jackson JAR en su classpath, Spring realiza la conversión. ¿Estás usando Spring 3? – atrain
gracias por la información en ResponseBody ... tengo que agregar algo, aunque: @RequestMapping (value = "/ pets/{petId}", method = RequestMethod.GET, produces = "application/json") @ResponseBody public Pet getPet (@PathVariable String petId, modelo modelo) { // implementación omitida } –