HttpMessageNotReadableException:缺少必需的请求正文(偶尔)-SpringMVC默认控制器请求映射HTTP方法?

时间:2019-10-18 13:49:03

标签: ajax spring spring-boot spring-mvc

我有以下代码代表Ajax POST请求:

@RequestMapping("/participant/insertEvent")
public boolean insertEvent(Principal principal, @RequestBody String json, HttpServletRequest request) throws Exception {
     //...
     //return true or false
}

JS:

$.ajax({
    type : "post",
    dataType : "json",
    url : '/app/participant/insertEvent',   
    data : JSON.stringify({'p1': p1, 'p2' : p2})        
});

该应用已部署到生产环境中,整个一周内所有用户都在使用该应用。

今天早上,使用这种方法(insertEvent),我遇到了以下生产问题:

org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public boolean 
app.controller.participant.AjaxOperationsController.insertEvent(java.security.Principal,java.lang.String,javax.servlet.http.HttpServletRequest) throws java.lang.Exception at 
org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:161) at        org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:130) at           org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:124) at 

    org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:161) at ...

我想知道,是因为我没有明确指定这是method={RequestMethod.POST}吗?

但是,如果我未指定HTTP方法,则默认值为什么?

但是,如果这是问题所在,那么为什么该应用程序在99%的时间内都能正常工作,而不是针对该用户呢?

1 个答案:

答案 0 :(得分:0)

仅供参考,该错误是由于在JSON 中包含来自TextArea值的未编码%(百分比)特殊字符引起的。