Подтвердить что ты не робот

Spring mvc @RequestMapping заголовки могут принимать только одно значение?

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

@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 считает, что два значения типа контента являются "и" отношениями, но вместо этого я хочу, чтобы они были "или". Какие-либо предложения? Спасибо!

4b9b3361

Ответ 1

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

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

ИЛИ

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

Ответ 2

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

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"}