Как явно получить почтовые данные в Spring MVC?

Есть ли способ получить сами данные сообщения? Я знаю, что spring обрабатывает привязку почтовых данных к объектам Java. Но, учитывая два поля, которые я хочу обработать, как я могу получить эти данные?

Например, предположим, что моя форма имеет два поля:

 <input type="text" name="value1" id="value1"/>
 <input type="text" name="value2" id="value2"/>

Как мне получить эти значения в моем контроллере?


person Community    schedule 22.03.2010    source источник


Ответы (4)


Если вы используете один из встроенных экземпляров контроллера, то одним из параметров вашего метода контроллера будет объект Request. Вы можете вызвать request.getParameter("value1"), чтобы получить значение данных POST (или PUT).

Если вы используете аннотации Spring MVC, вы можете добавить аннотированный параметр к параметрам вашего метода:

@RequestMapping(value = "/someUrl")
public String someMethod(@RequestParam("value1") String valueOne) {
 //do stuff with valueOne variable here
}
person Jacob Mattison    schedule 22.03.2010
comment
это работает с несколькими параметрами запроса, это правильно? Вам не нужно оборачиваться в один объект? stackoverflow.com/q/12862320/106261 - person NimChimpsky; 12.10.2012
comment
‹3 это для тех случаев, когда вам не нужна/не нужна форма на основе модели (для формы поиска или контактной формы и т. д.) - person Don Cheadle; 02.02.2015

Другой ответ на точный вопрос OP — установить для типа контента consumes значение "text/plain", а затем объявить входной параметр @RequestBody String. Это передаст текст данных POST в качестве объявленной переменной String (postPayload в следующем примере).

Конечно, это предполагает, что ваша полезная нагрузка POST представляет собой текстовые данные (как указано в OP).

Пример:

    @RequestMapping(value = "/your/url/here", method = RequestMethod.POST, consumes = "text/plain")
    public ModelAndView someMethod(@RequestBody String postPayload) {    
        // ...    
    }
person simon    schedule 30.07.2014
comment
Это ответ, который я искал. Под «сами почтовыми данными» я понимаю то же самое. Спасибо! - person mauromartini; 03.12.2014
comment
Для нескольких параметров сообщения (например, value1 и value2 это создаст одну строку для обоих значений? Тогда вам нужно будет проанализировать отдельные значения? Зачем это делать, когда вы можете указать/получить каждое значение по отдельности, как в принятом ответе? - person Don Cheadle; 02.02.2015
comment
@mmcrae - это просто еще один способ решить проблему, который, возможно, полезен для других пользователей, у которых нет нескольких параметров POST, а вместо этого просто есть блок текста или двоичных данных. Это была моя ситуация, и это то, что я надеялся узнать, когда я нажал на этот вопрос. - person simon; 06.02.2015
comment
Именно то, что я искал. Он также работает с Consumers=application/json при публикации json. - person Manish; 14.05.2016
comment
Привет. Я использую Postman для тестирования своего API. Почтальон помогает мне заполнить тело для POST данными. Проблема в том, что я получаю 403, когда использую RequestMethod.POST. Я даже добавил @CrossOrigin(origins = "*"), но все равно получаю то же самое... Не знаю, что происходит... Я использовал ту же подпись, что и ваш ответ (за исключением того, что someMethod возвращает String в моем случае)... - person Kurt Miller; 03.04.2018

Spring MVC работает поверх Servlet API. Таким образом, вы можете использовать HttpServletRequest#getParameter() для этого:

String value1 = request.getParameter("value1");
String value2 = request.getParameter("value2");

HttpServletRequest уже должен быть доступен вам внутри Spring MVC в качестве одного из аргументов метода handleRequest().

person BalusC    schedule 22.03.2010
comment
Хай @BalusC, в моем случае у меня в запросе более 20 переменных. Однако у меня есть компонент со всеми переменными параметра запроса. Теперь я хочу получить все значения в bean-компоненте из запроса, а не получать их по одному. У нас есть эта функция в struts2 с помощью ModelDrivenBean. Есть ли у нас такая функция в Spring Framework. - person vissu; 17.04.2012
comment
Да, используя аннотацию @ModelAttribute и компонент поддержки формы. Эта ссылка хорошо описывает, как это сделать: viralpatel.net /blogs/2010/07/spring-3-mvc-handling-forms.html - person ; 18.04.2012
comment
@vissu, если у вас более 20 переменных, вам стоит подумать об упрощении - person CodeMonkey; 12.10.2016
comment
Здравствуйте BalusC. Следуя ответу Симмона ниже, я использую Postman для тестирования моего API. Почтальон помогает мне заполнить тело для POST данными. Проблема в том, что я получаю 403, когда использую RequestMethod.POST. Я даже добавил @CrossOrigin(origins = "*"), но все равно получаю то же самое... Не знаю, что происходит... Я использовал ту же подпись, что и ваш ответ (за исключением того, что someMethod возвращает String в моем случае)... - person Kurt Miller; 03.04.2018

Вы можете просто передать нужный атрибут без каких-либо аннотаций в контроллере:

@RequestMapping(value = "/someUrl")
public String someMethod(String valueOne) {
 //do stuff with valueOne variable here
}

Работает с GET и POST

person Suisse    schedule 22.12.2020