2011-02-10 11 views
11

esto funcionará:spring mvc @RequestMapping los encabezados solo pueden aceptar un valor?

@RequestMapping(value = "/test", method = RequestMethod.POST, 
    headers = {"content-type=application/json"}) 
{ 
....... 
} 

Si he añadido otro valor a la misma como la siguiente, la que se producirá un error y me dice "no se permite el método HTTP especificado para el recurso solicitado (Método de petición 'post' no soportado)"

@RequestMapping(value = "/test", method = RequestMethod.POST, 
    headers = {"content-type=application/json","content-type=application/xml"}) 
{ 
....... 
} 

Mi opinión al respecto es que la primavera piensa que los dos valores de tipo de contenido son 'y' relación, pero en lugar que quieren que sean 'o'. ¿Alguna sugerencia? ¡Gracias!

Respuesta

19

¿Ha intentado hacer content-type=application/json,application/xml?

No estoy seguro de si funcionaría, pero poniendo dos encabezados content-type creo que solo uno ganará.

O

utilizar eventualmente de dos RequestMapping anotaciones en el mismo método con diferentes content-type cabeceras?

+2

"content-type = application/json, application/xml" trabajado! ¡Gracias! – Bobo

+1

¡Impresionante! ¡Alegra oírlo! –

+2

@dave G solo se acepta un '@ RequestMapping' por el método – deFreitas

30

Si está utilizando Spring 3.1.x. Puede ver usando consume, produce atributos de @RequestMapping anotación. Aquí está la entrada del blog de primavera sobre las mejoras:

http://spring.io/blog/2011/06/13/spring-3-1-m2-spring-mvc-enhancements/

fragmento del documento anterior:

@RequestMapping(value="/pets", headers="Content-Type=application/json") 
public void addPet(@RequestBody Pet pet, Model model) { 
    // ... 
} 

se sustituye por:

@RequestMapping(value="/pets", consumes="application/json") 
public void addPet(@RequestBody Pet pet, Model model) { 
    // ... 
} 

Además, si necesita múltiples tipos de medios. Usted puede hacer lo siguiente:

produces={"application/json", "application/xml"} 

consumes={"application/json", "application/xml"} 
+0

Tengo una duda aquí - cuando escribo' produces = "application/xml" ', todavía me da el error 406. Pero si escribe' produce = "application/xml", headers = {"Content-Type = application/xml"} ', entonces todo funciona bien. Así que mi pregunta es por qué 'produce' no es suficiente para devolver la respuesta XML y necesita' encabezados' para completar la tarea. –

Cuestiones relacionadas