2 обработчика запросов для POST (ResponseBody + "Normal") - PullRequest
0 голосов
/ 14 ноября 2011

Мне нравится внедрять REST-API в мое приложение SpringMVC. На данный момент у меня есть один метод для обработки POST-запросов, который «возвращает» визуализированный ViewScript.

@RequestMapping(method=RequestMethod.POST)
public String onSubmit(User user, Model model)
{
    return "success";
}

Было бы неплохо добавить второй метод с аннотацией @ResponseBody для POST-запросов, например отправить JSON-ответ. Кроме того, старый Метод все еще должен существовать для обработки «обычных» запросов.

Но такой код не работает:

@RequestMapping(method=RequestMethod.POST)
public String onSubmit(User user, Model model)
{
    return "success";
}

@RequestMapping(method=RequestMethod.POST)
@ResponseBody
public Object add(User user, Model model)
{
    // [...]
    return myObject;
}

С этим кодом я получаю ошибку 405 (метод не разрешен) от Tomcat. Как я могу это исправить?

Ответы [ 2 ]

1 голос
/ 14 ноября 2011

В своем нынешнем виде Spring не может различить эти два запроса: один и тот же URL-адрес, один и тот же метод запроса.

Вы можете дифференцировать по типу mime:

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

Хотя с JSON связано несколько миметипов: / Значение headers принимает массив, поэтому вы можете сузить / расширить его при необходимости.

См. headers документы .

0 голосов
/ 06 марта 2014

НЕ ИСПОЛЬЗУЙТЕ ДВА АННОТАЦИИ. Это плохой вариант. Просто есть еще один метод без аннотации. Но метод из старого метода, проверяя условие ниже.

ПРОСТО ПРОЙДИТЕ БОЛЬШЕ АРГУМЕНТА ИЗ ПИТОМНИКА по параметру запроса (request = "JSON_Request").

@RequestMapping(method=RequestMethod.POST)
public String onSubmit(User user, Model model)
{
    if(request="JSON_Request") {
       newMethod(user, model);
    }
    return "success";
}


  private Object newMethod(User user, Model model)
{
    // [...]
    return myObject;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...