2011-02-10 17 views
11

to będzie działać:Spring mvc @RequestMapping headers może przyjąć tylko jedną wartość?

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

Jeśli dodałem inną wartość do niego podobny Poniżej zakończy się niepowodzeniem i powiedz „Określona metoda HTTP nie jest dozwolone dla żądanego zasobu (metoda żądanie«POST»nie obsługiwane)”

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

Domyślam na to, że wiosna myśli te dwie wartości są typu zawartości«i»związek ale zamiast Chcę, żeby być«lub». Jakieś sugestie? Dzięki!

Odpowiedz

19

Czy próbowałeś już robić content-type=application/json,application/xml?

Nie jestem pewien, czy to zadziałało, ale umieściłem tam dwa nagłówki content-type. Myślę, że wygra tylko jeden.

LUB

possibily użyć dwóch RequestMapping adnotacji o tej samej metody z różnych content-type nagłówków?

+2

"content-type = application/json, application/xml" zadziałało! Dzięki! – Bobo

+1

Awesome! Miło to słyszeć! –

+2

@dave G tylko jeden '@ RequestMapping' jest akceptowany przez metodę – deFreitas

30

Jeśli używasz Spring 3.1.x. Możesz spojrzeć na użycie , która zużywa, produkuje atrybutów adnotacji @RequestMapping. Oto po Wiosna blog na ulepszenia:

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

Fragment z doc powyżej:

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

otrzymuje brzmienie:

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

Ponadto, jeśli trzeba wiele typów mediów. Możesz wykonać następujące czynności:

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

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

Mam tu wątpliwość - kiedy piszę' produkuje = "application/xml" ', nadal daje mi błąd 406. Ale jeśli napiszę' produkuje = "application/xml", headers = {"Content-Type = application/xml"} ', wszystko działa poprawnie. Więc moje pytanie brzmi, dlaczego "produkuje" nie wystarcza do zwrócenia odpowiedzi XML i potrzebuje 'nagłówków' do ukończenia zadania. –

Powiązane problemy