缺少必需的请求正文内容:org.springframework.web.method.HandlerMethod $ HandlerMethodParameter

cha*_*lvi 20 java ajax json jackson spring-4

将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.springframework.web.method.HandlerMethod$HandlerMethodParameter@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.springframework.web.method.HandlerMethod$HandlerMethodParameter@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.springframework.web.method.HandlerMethod$HandlerMethodParameter@98d8d36c
07:1
Run Code Online (Sandbox Code Playgroud)

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);
                        }
                    });
Run Code Online (Sandbox Code Playgroud)

控制器:

@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;
    }
Run Code Online (Sandbox Code Playgroud)

AppConfig.java

@豆

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;
}
Run Code Online (Sandbox Code Playgroud)

请帮我解决这个问题.我使用的是Spring 4,jakson 2.3.0

如果我尝试POST请求它给出:org.springframework.web.HttpRequestMethodNotSupportedException:不支持请求方法'POST'

ach*_*ach 29

您无法使用HTTP GET请求发送请求正文.您应该进行修改addDepartment(),使其仅支持POST,并将JSON POST到该端点.如果要获取有关某个部门的信息,您应该创建一个单独的控制器方法来执行该操作(并且不需要请求主体).

此外,仔细检查您的端点定义,因为您在$.ajax呼叫中拼写错误的"报销" .


小智 6

我也有同样的问题.我使用"Postman"来获取JSON请求.代码本身没错.我只是将内容类型设置为JSON(application/json)并且它可以正常工作,如下图所示

我的守则


小智 5

尝试这个:

@RequestBody(required = false) 字符串 str

  • 不,这可能无济于事 (3认同)

cha*_*lvi 1

抱歉,伙计们..实际上因为需要 csrf 令牌,我遇到了这个问题。我已经实现了 spring security 并且启用了 csrf。通过ajax调用我需要传递csrf令牌。