Сообщение JSON для Spring контроллера
Привет, Я начинаю с веб-служб в Spring, поэтому я пытаюсь разработать небольшое приложение в Spring + JSON + Hibernate. У меня есть некоторые проблемы с HTTP-POST. Я создал метод:
@RequestMapping(value="/workers/addNewWorker", method = RequestMethod.POST, produces = "application/json", consumes = "application/json")
@ResponseBody
public String addNewWorker(@RequestBody Test test) throws Exception {
String name = test.name;
return name;
}
И моя модель Test выглядит так:
public class Test implements Serializable {
private static final long serialVersionUID = -1764970284520387975L;
public String name;
public Test() {
}
}
ПОСТМАН Я отправляю просто JSON { "name": "testName" }, и я всегда получаю ошибку;
The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.
Я импортировал библиотеку Джексона. Мои методы GET работают нормально. Я не знаю, что я делаю неправильно. Я благодарен за любые предложения.
Ответы
Ответ 1
Преобразуйте объект JSON в строку JSON с помощью
JSON.stringify({ "name": "testName" })
или вручную. @RequestBody ожидает строку json вместо объекта json.
Примечание. Строгая функция, имеющая проблемы с некоторой версией IE, firefox будет работать
проверить синтаксис вашего запроса ajax для запроса POST. свойство processData: false требуется в запросе ajax
$.ajax({
url:urlName,
type:"POST",
contentType: "application/json; charset=utf-8",
data: jsonString, //Stringified Json Object
async: false, //Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation
cache: false, //This will force requested pages not to be cached by the browser
processData:false, //To avoid making query String instead of JSON
success: function(resposeJsonObject){
// Success Action
}
});
контроллер
@RequestMapping(value = urlPattern , method = RequestMethod.POST)
public @ResponseBody Test addNewWorker(@RequestBody Test jsonString) {
//do business logic
return test;
}
@RequestBody
-Covert Json object to java
@ResponseBody
- преобразовать объект Java в json
Ответ 2
Вам необходимо включить методы получения и установки для всех полей, определенных в классе модели Test
-
public class Test implements Serializable {
private static final long serialVersionUID = -1764970284520387975L;
public String name;
public Test() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Ответ 3
Попробуйте использовать приложение /* вместо этого. И используйте JSON.maybeJson(), чтобы проверить структуру данных в контроллере.
Ответ 4
Не забудьте добавить геттеры и сеттеры в класс модели (в примере Test class).
Ответ 5
Сделайте следующее, если вы хотите использовать json в качестве HTTP-запроса и ответа. Поэтому нам нужно внести изменения в [context].xml
<!-- Configure to plugin JSON as request and response in method handler -->
<beans:bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<beans:property name="messageConverters">
<beans:list>
<beans:ref bean="jsonMessageConverter"/>
</beans:list>
</beans:property>
</beans:bean>
<!-- Configure bean to convert JSON to POJO and vice versa -->
<beans:bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
</beans:bean>
MappingJackson2HttpMessageConverter в RequestMappingHandlerAdapter messageConverters, чтобы API Jackson запускал и конвертировал JSON в Java Beans и наоборот. Имея эту конфигурацию, мы будем использовать JSON в теле запроса, и мы получим данные JSON в ответе.
Я также предоставляю небольшой фрагмент кода для части контроллера:
@RequestMapping(value = EmpRestURIConstants.DUMMY_EMP, method = RequestMethod.GET)
public @ResponseBody Employee getDummyEmployee() {
logger.info("Start getDummyEmployee");
Employee emp = new Employee();
emp.setId(9999);
emp.setName("Dummy");
emp.setCreatedDate(new Date());
empData.put(9999, emp);
return emp;
}
Итак, в приведенном выше коде emp-объект будет напрямую преобразовываться в json в качестве ответа. то же самое произойдет и для почты.
Ответ 6
смотрите здесь
Типы расходных материалов сопоставленного запроса, сужающие первичное сопоставление.
производитель используется для сужения первичного сопоставления, отправляемый вами запрос должен указывать точный заголовок, чтобы соответствовать ему.