Заголовки Spring MVC @RequestMapping могут принимать только одно значение? - PullRequest
16 голосов
/ 10 февраля 2011

Это будет работать:

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

Если я добавлю к нему другое значение, подобное приведенному ниже, произойдет сбой и произойдет следующее:

Указанный метод HTTPне разрешено для запрошенного ресурса (метод запроса 'POST' не поддерживается)

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


Я полагаю, это потому, что Spring считает, что два значения типа имеют значения "И "отношения, но вместо этого я хочу, чтобы они были" ИЛИ ".

Есть предложения?

Спасибо!

Ответы [ 2 ]

33 голосов
/ 14 ноября 2012

Если вы используете Spring 3.1.x . Вы можете посмотреть на использование потребляет , создает атрибутов аннотации @RequestMapping. Вот весенний пост в блоге об улучшениях:

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

Фрагмент из документа выше:

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

заменяется на:

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

Кроме того, если вам нужно несколько типов мультимедиа. Вы можете сделать следующее:

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

consumes={"application/json", "application/xml"}
22 голосов
/ 10 февраля 2011

Вы пытались сделать content-type=application/json,application/xml?

Не уверен, что это сработает, но добавив туда два content-type заголовка, думаю, победит только один.

ИЛИ

возможно использовать две аннотации RequestMapping для одного и того же метода с разными заголовками content-type?

...