2015-03-24 4 views
13

Ошибка передачи данных JSON от JSP к контроллеру в ResponseBody.

07:13:53.919 DEBUG o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - Resolving exception from handler [public com.chaitanya.ajax.AjaxResponse com.chaitanya.web.controller.DepartmentController.addDepartment(com.chaitanya.ajax.AjaxResponse)]: 

org.springframework.http.converter.HttpMessageNotReadableException: Required request body content is missing: org.[email protected]98d8d36c 
07:13:54.106 DEBUG o.s.w.s.m.a.ResponseStatusExceptionResolver - Resolving exception from handler [public com.chaitanya.ajax.AjaxResponse com.chaitanya.web.controller.DepartmentController.addDepartment(com.chaitanya.ajax.AjaxResponse)]: org.springframework.http.converter.HttpMessageNotReadableException: Required request body content is missing: org.[email protected]98d8d36c 
07:13:54.125 DEBUG o.s.w.s.m.s.DefaultHandlerExceptionResolver - Resolving exception from handler [public com.chaitanya.ajax.AjaxResponse com.chaitanya.web.controller.DepartmentController.addDepartment(com.chaitanya.ajax.AjaxResponse)]: org.springframework.http.converter.HttpMessageNotReadableException: Required request body content is missing: org.[email protected]98d8d36c 
07:1 

Ajax вызовов:

$.ajax({ 
         url: "/BusinessReimbursment/addDepartment", 
         method: 'POST', 
         dataType: 'json', 
         data: "{\"message\":\"abc\",\"success\":true}", 
         contentType: 'application/json', 
         mimeType: 'application/json', 
         success: function(data) { 
          alert(data.id + " " + data.name); 
          commit(true); 
         }, 
         error:function(data,status,er) { 
          alert("error: "+data+" status: "+status+" er:"+er); 
         } 
        }); 

Контроллер:

@RestController 
public class DepartmentController { 

    @Autowired 
    @Qualifier("departmentService") 
    private DepartmentService departmentService; 

    @RequestMapping(value="/addDepartment", method={RequestMethod.POST}) 
    public @ResponseBody AjaxResponse addDepartment(@RequestBody AjaxResponse departmentDTO){ 
     AjaxResponse response=new AjaxResponse(); 
     return response; 
    } 

AppConfig.java

@Bean

public RequestMappingHandlerAdapter annotationMethodHandlerAdapter() 
{ 
    final RequestMappingHandlerAdapter annotationMethodHandlerAdapter = new RequestMappingHandlerAdapter(); 
    final MappingJackson2HttpMessageConverter mappingJacksonHttpMessageConverter = new MappingJackson2HttpMessageConverter(); 

    List<HttpMessageConverter<?>> httpMessageConverter = new ArrayList<HttpMessageConverter<?>>(); 
    httpMessageConverter.add(mappingJacksonHttpMessageConverter); 

    String[] supportedHttpMethods = { "POST", "GET", "HEAD" }; 

    annotationMethodHandlerAdapter.setMessageConverters(httpMessageConverter); 
    annotationMethodHandlerAdapter.setSupportedMethods(supportedHttpMethods); 

    return annotationMethodHandlerAdapter; 
} 

, пожалуйста, помогите мне выйти из этого. Я использую Spring 4, Яксон 2.3.0

Если я пытаюсь POST запрос, он дает: org.springframework.web.HttpRequestMethodNotSupportedException: метод запроса «POST» не поддерживается

+0

Вы бы разместить свой код для класса AjaxResponse также ваш URL является «/ BusinessReimbursment/addDepartment» но вы запрашиваете отображение только «addDepartment», если оно «/ addDepartment» или «/ BusinessReimbursment/addDepartment». – faljbour

+0

В url нет проблем. Потому что он работает без requestBody. –

+0

'public class AjaxResponse { \t частный булевский успех; личное сообщение String; \t public boolean isSuccess() { \t \t возвращение успехов; \t} \t public void setSuccess (boolean success) { \t \t это.успех = успех; \t} \t public String getMessage() { \t \t return message; \t} \t public void setMessage (String message) { \t \t this.message = message; \t} \t } ' –

ответ

0

Извините, ребята .. на самом деле из-за токена csrf было необходимо, я получал эту проблему. Я реализовал весеннюю безопасность, и csrf включен. И через вызов ajax мне нужно передать токен csrf.

+0

'Метод запроса 'POST' не поддерживается Недействительный токен CSRF, найденный для http: // localhost: 8080/BusinessReimbursment/addDepartment DispatcherServlet с именем« диспетчер »обработка запроса POST для [/ BusinessReimbursment/403] Поиск метода обработчика для пути/403 HttpRequestMethodNotSupportedException : Метод запроса «POST» не поддерживается HttpRequestMethodNotSupportedException: метод запроса «POST» не поддерживается HttpRequestMethodNotSupportedException: метод запроса «POST» не поддерживается WARN osweb.servlet.PageNotFound - метод запроса «POST» не поддерживается - ' –

17

Вы не можете отправить запрос тело с запросом HTTP GET. Вы должны изменить addDepartment(), чтобы он поддерживал только POST и POST ваш JSON до этой конечной точки. Если вы хотите получить информацию о отделе, вы должны создать отдельный метод контроллера, который делает это (и не требует тело запроса).

Кроме того, дважды проверьте свои определения конечных точек, так как у вас есть ошибочное «возмещение» в вызове $.ajax.

+0

I hv упоминание GET n POST в аннотации сопоставления запроса. Если я передаю ответ после ответа, тогда он дает ошибку, которую я упоминаю в post .. –

+1

Пожалуйста, снова прочитайте мой ответ. Вы не можете использовать 'GET' в аннотации' @ RequestMapping' вместе с '@ RequestBody', так как запрос GET не может иметь тело. В общем случае GET следует использовать только для операций чтения, таких как получение записи или поиск. Удалите GET полностью и повторите попытку. – ach

+0

Я изменил метод: POST и убрал RequestMethod: GET Из @requestMapping аннотации я получаю следующую ошибку, которую я упоминаю в сообщении. –

2

Я внес некоторые изменения в код и проверил его с проектом Spring, который у меня есть, и он работает. Логика будет работать только с POST, если я использую GET, это вызывает ошибку с недопустимым запросом. Также в вашем вызове ajax я прокомментировал commit (true), отладчик браузера помечен и ошибка, которую он не определил. Просто измените URL-адрес, чтобы он соответствовал вашей архитектуре проекта Spring.

$.ajax({ 
        url: "/addDepartment", 
        method: 'POST', 
        dataType: 'json', 
        data: "{\"message\":\"abc\",\"success\":true}", 
        contentType: 'application/json', 
        mimeType: 'application/json', 
        success: function(data) { 
         alert(data.success + " " + data.message); 
         //commit(true); 
        }, 
        error:function(data,status,er) { 
         alert("error: "+data+" status: "+status+" er:"+er); 
        } 
       }); 



@RequestMapping(value="/addDepartment", method=RequestMethod.POST) 
    public AjaxResponse addDepartment(@RequestBody final AjaxResponse departmentDTO) 
    { 
    System.out.println("addDepartment: >>>>>>> "+departmentDTO); 
    AjaxResponse response=new AjaxResponse(); 
    response.setSuccess(departmentDTO.isSuccess()); 
    response.setMessage(departmentDTO.getMessage()); 
    return response; 
    } 
2

У меня также была та же проблема. Я использую «Почтальон» для запроса JSON. Сам код не является неправильным. Я просто установить тип контента в формате JSON (application/json), и она работала, как вы можете видеть на изображении ниже

My Code

+0

Это вопрос? Если да, отправьте его как отдельный вопрос (https://stackoverflow.com/questions/ask). Вы можете добавить ссылку на этот вопрос, если это необходимо. –

+0

Прошу прощения, я недавно начал комментировать и отвечать. Я постарался ответить. –

+0

В следующий раз, не превращайте весь свой пост в ссылку, лучше добавьте ссылку в конце. Кроме того, ОП ничего не говорил о Почтальоне. Если вы хотите решить эту проблему, кажется хорошей идеей показать, какая именно ошибка и как воспроизвести ошибку. –

Смежные вопросы