@RequestBody не работает - Возвращено Http Status 415 неподдерживаемый тип носителя в Jquery - PullRequest
4 голосов
/ 11 февраля 2012

Я использую 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 {
}

Ответы [ 2 ]

1 голос
/ 15 февраля 2012

Попробуйте изменить json, который вы отправляете, из массива объектов на объект, содержащий другие объекты, например:

{{"name":"opportunityId","value":"ad"},{"name":"dem andId","value":"hgh"},{"name":"demandCreator","val ue":"hghhgh"},{"name":"demandOwner","value":"hg"}}

Вместо

[{"name":"opportunityId","value":"ad"},{"name":"dem andId","value":"hgh"},{"name":"demandCreator","val ue":"hghhgh"},{"name":"demandOwner","value":"hg"}]
0 голосов
/ 06 октября 2015

У меня была похожая проблема, и в моем случае проблема была не в сообщении ajax: так как я связал вызов ajax с нажатием кнопки формы, после выполнения запроса ajax форма была отправлена, и это вызвало ошибку,Запрет на отправку формы решил проблему:

$('#btn_confirm').click(function (e) {
    e.preventDefault();     // do not submit the form
    // your ajax call here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...