Я использую Spring 3.1 для разработки своего проекта.Во время работы я застрял на месте и очень нуждался в вашей помощи.
Мое требование от клиента: я получу объект JSON и тоже верну объект JSON.Я успешно реализовать то же самое, когда я использую запрос получения и удаления отправить с сервера.Но когда я использую метод PUT
для отправки моих данных, возникает какая-то проблема.Поскольку PUT
не может получать данные в @ModelAttribute
Я использую аннотацию @RequestBody
для получения моих данных, отправленных от клиента.
Когда я использую @RequestBody MultiValueMap<String, String>
body, появляется ошибка
Http Status 415. неподдерживаемый тип носителя.
Когда я пытаюсь получить данные с помощью @RequestBody DemandBean
(мой проектный компонент), я получаю следующую ошибку.
org.codehaus.jackson.JsonParseException: неожиданный символ ('o' (код 111)): ожидалось допустимое значение (число, строка, массив, объект, 'true', 'false' или 'null') в [Source: org.apache.catalina.connector.CoyoteInputStream@19 d688;строка: 1, столбец: 2]
Но я совершенно уверен, что правильно сопоставил свою библиотеку Джексона, потому что с @RequestBody
я могу получить json обратно клиенту, а также отправить Json и springможет анализировать с @ModelAttribute
, если метод GET
, POST
, DELETE
.
Ниже я даю код:
Html FIle для отправки данных:
var jsonStr = $("#searchDemand_frm").serializeArray();
$("#searchResultTable td").remove();
alert(JSON.stringify(jsonStr)); // Return proper form data in json format
$.ajax({
contentType : "application/json",
dataType : 'json',
type : "PUT",
url : targetUrl,
data : jsonStr,
async : false,
success : function(data) {
alert("In Success");
},
error : function(request, status, error) {
showPermissionDenied(request);
}
});
Формат JSON отправляется на сервер:
[{"name":"opportunityId","value":"ad"},{"name":"dem andId","value":"hgh"},{"name":"demandCreator","val ue":"hghhgh"},{"name":"demandOwner","value":"hg"}, {"name":"status","value":"IP"},{"name":"region","v alue":"hgh"}]
-Servlet.xml:
<mvc:annotation-driven />
<context:component-scan base-package="com.ericsson.rms.controller.*" />
<context:component-scan base-package="com.ericsson.rms.application.authorizatio n" />
<context:annotation-config/>
<aop:aspectj-autoproxy proxy-target-class="true" />
<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jacksonMessageConverter" />
</list>
</property>
</bean>
Класс контроллера:
@RequestMapping(method = RequestMethod.PUT)
public @ResponseBody
List<DemandBean> searchDemandDetailsWithPut(@RequestBody DemandBean demand,
HttpServletResponse response) throws IOException {
}