2011-02-10 8 views
11

questo funzionerà:le intestazioni di mvc @RequestMapping di primavera possono accettare solo un valore?

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

Se ho aggiunto un altro valore ad esso come il seguente, il fallirà e mi dicono "Il metodo HTTP specificato non è consentito per la risorsa richiesta (metodo di richiesta 'POST' non supportato)"

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

mia ipotesi su questo è che la primavera pensa che i due valori contenuti sono di tipo 'e' rapporto, ma in vece voglio loro di essere 'o'. Eventuali suggerimenti? Grazie!

risposta

19

Hai provato a fare content-type=application/json,application/xml?

Non sono sicuro che funzionerebbe ma inserendo due intestazioni content-type, penso che ne vincerà solo una.

O

utilizzare possibilmente due RequestMapping annotazioni sullo stesso metodo con differenti content-type intestazioni?

+2

"content-type = application/json, application/xml" funzionato! Grazie! – Bobo

+1

Fantastico! Felice di sentirlo! –

+2

@dave G un solo '@ RequestMapping' è accettato con il metodo – deFreitas

30

Se si utilizza Spring 3.1.x. È possibile guardare utilizzando utilizza, produce gli attributi dell'annotazione @RequestMapping. Ecco il post sul blog primavera sui miglioramenti:

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

Snippet dal documento di cui sopra:

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

è sostituita da:

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

Inoltre, se avete bisogno di più tipi di media. È possibile effettuare le seguenti operazioni:

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

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

Ho un dubbio qui - quando scrivo' produce = "application/xml" ', ancora mi dà l'errore 406. Ma se scrivi' produce = "application/xml", header = {"Content-Type = application/xml"} ', quindi tutto funziona correttamente. Quindi la mia domanda è perché 'produce' non è sufficiente per restituire la risposta XML e hanno bisogno di' intestazioni' per completare l'operazione. –

Problemi correlati