Ответ 1
Вы можете получить param из запроса.
@ResponseBody
public ResponseEntity<Boolean> saveData(HttpServletRequest request,
HttpServletResponse response, Model model){
String jsonString = request.getParameter("json");
}
Веб-сервис с использованием spring, в котором я должен получить параметры из тела моего почтового запроса? Содержание тела похоже на: -
source="mysource"
&json=
{
"items": [
{
"username": "test1",
"allowed": true
},
{
"username": "test2",
"allowed": false
}
]
}
И метод веб-сервиса выглядит так: -
@RequestMapping(value = "/saveData", headers="Content-Type=application/json", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<Boolean> saveData(@RequestBody String a) throws MyException {
return new ResponseEntity<Boolean>(uiRequestProcessor.saveData(a),HttpStatus.OK);
}
Пожалуйста, дайте мне знать, как мне получить параметры из тела? Я могу получить все тело в своей строке, но я не думаю, что это был бы правильный подход. Пожалуйста, дайте мне знать, как мне продолжить.
Вы можете получить param из запроса.
@ResponseBody
public ResponseEntity<Boolean> saveData(HttpServletRequest request,
HttpServletResponse response, Model model){
String jsonString = request.getParameter("json");
}
Вы можете получить все тело сообщения в POJO. Следующее что-то подобное
@RequestMapping(value = { "/api/pojo/edit" }, method = RequestMethod.POST, produces = "application/json", consumes = "application/json")
@ResponseBody
public Boolean editWinner( @RequestBody Pojo pojo) {
Где каждое поле в Pojo (включая геттер/сеттеры) должно соответствовать объекту запроса Json, который получает контроллер.
Вы можете связать json с POJO с помощью MappingJacksonHttpMessageConverter
. Таким образом, ваша подпись контроллера может читать: -
public ResponseEntity<Boolean> saveData(@RequestBody RequestDTO req)
Где RequestDTO должен быть bean соответствующим образом аннотирован для работы с сериализацией/десериализацией джексона. Ваш файл * -servlet.xml должен иметь конвертер сообщений Jackson, зарегистрированный в RequestMappingHandler, следующим образом:
<list >
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
</list>
</property>
</bean>
В классе это нравится
@RequestMapping(value = "/saveData", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<Boolean> saveData(HttpServletResponse response,Bean beanName) throws MyException {
return new ResponseEntity<Boolean>(uiRequestProcessor.saveData(a),HttpStatus.OK);
}
На странице выполните следующие действия:
<form enctype="multipart/form-data" action="<%=request.getContextPath()%>/saveData" method="post" name="saveForm" id="saveForm">
<input type="text" value="${beanName.userName }" id="username" name="userName" />
</from>
Вам понадобятся эти импорт...
import javax.servlet.*;
import javax.servlet.http.*;
И, если вы используете Maven, вам также понадобится это в блоке зависимостей файла pom.xml в вашем базовом каталоге проекта.
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
Тогда вышеупомянутое исправление Джейсона будет работать:
@ResponseBody
public ResponseEntity<Boolean> saveData(HttpServletRequest request,
HttpServletResponse response, Model model){
String jsonString = request.getParameter("json");
}
Вы можете попробовать использовать @RequestBodyParam
@RequestMapping(value = "/saveData", headers="Content-Type=application/json", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<Boolean> saveData(@RequestBodyParam String source,@RequestBodyParam JsonDto json) throws MyException {
...
}