Отсутствует требуемый контент тела запроса: org.springframework.web.method.HandlerMethod $HandlerMethodParameter

Ошибка передачи данных 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 Call:

$.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, jakson 2.3.0

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

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

My Code

Ответ 4

Я сделал некоторые незначительные изменения в вашем коде и протестировал его с помощью проекта 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;
  }

Ответ 5

Попробуй это:

@RequestBody (обязательно = false) String str