Ajax 偶尔出现错误:org.springframework.http.converter.httpMessageNodeTableException:缺少必需的请求正文:public boolean

Ajax 偶尔出现错误:org.springframework.http.converter.httpMessageNodeTableException:缺少必需的请求正文:public boolean,ajax,spring,spring-mvc,Ajax,Spring,Spring Mvc,为受影响的少数用户更新,看起来他们正在提交 两个操作都可以发布和获取每个操作的请求,即使它们应该这样做 只提交一个帖子请求!如前所述,99%的用户工作完美 下面的POST Ajax请求很好,那么为什么我们会得到双POST/GET呢 来自某些用户的配对? e、 g 1.2.3.4--[10/Nov/2020:09:44:20-0500]“POST/system/participant/insertEvent HTTP/1.1”200 4,后跟 1.2.3.4--[10/Nov/2020:09:44

为受影响的少数用户更新,看起来他们正在提交 两个操作都可以发布和获取每个操作的请求,即使它们应该这样做 只提交一个帖子请求!如前所述,99%的用户工作完美 下面的POST Ajax请求很好,那么为什么我们会得到双POST/GET呢 来自某些用户的配对? e、 g

1.2.3.4--[10/Nov/2020:09:44:20-0500]“POST/system/participant/insertEvent HTTP/1.1”200 4,后跟

1.2.3.4--[10/Nov/2020:09:44:20-0500]“GET/system/participant/insertEvent HTTP/1.1”200 4

什么可以解释部署到生产环境中的应用程序中偶尔出现的(非持续)错误

org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public boolean 
在Ajax方法上

@RequestMapping("/insertEvent")
public boolean insertEvent(Principal principal, @RequestBody String json, HttpServletRequest request) throws Exception {
    

        participantService.insertEvent(principal, json, (Integer)request.getSession().getAttribute("dataId"), true);
        return true;
}
从JS方面来说,这个服务器端方法称为

$.ajax({
    type : "post",
    dataType : "json",
    url : '/insertEvent',   
    data : encodeURIComponent(JSON.stringify({'newEventStartTimestamp' : newEventStartTimestamp, 'newEventEndTimestamp' : newEventEndTimestamp, 
                           'newGuiEventID' : newEventID})) 
});
如前所述,此代码在生产中99%的时间都有效,但对于某些特定用户或操作,它会中断

在过去,我们将此问题的一次出现与未编码的请求体(在一个表单字段中键入)联系在一起,但这已得到解决。现在在JS中,我们做了
encodeURIComponent
,如您所见。这种偶尔发生的罕见错误还有哪些潜在原因

更多信息:1)当这些
HttpMessageNodeTableException:Required request body丢失时发生错误,它们都来自相同的少数用户;2) 这些用户未受影响。他们成功地完成了操作,所以这是一个副作用问题。我最初认为JSON可能是空的或损坏的,但如果是这样的话,它们就会失败

我的Java
@RequestMapping
方法没有显式指定POST方法,但是JS调用指定了POST数据类型。它

HTTP方法参数没有默认值。所以,如果我们不指定 值,它将映射到任何HTTP请求


但这是个问题吗?它可以捕捉所有类型,我将从JS端传递帖子。

什么是“它中断”呢?具体错误是什么?正如您所提到的,
Required请求主体…
错误可能是由于
GET
引起的。顺便说一句:为端点指定HTTP方法是一种很好的做法。
GET/insertEvent
对您的应用程序有意义吗?如果不允许,则指定例如
@PostMapping
将导致该端点按预期返回
405不允许的方法。也许这会让你注意到这个
GET
的确切来源。正如我在顶部的更新中所说,问题是POST和GET都是为一些罕见的用户提交的。任何用户都不应该有
GET/insertEvent
。有些东西正在为那些非常罕见的用户提交一对POST/GET。是的,但你也说过发生这种情况的用户不受影响。那么他们是收到了错误,还是没有受到影响?很可能您的客户端代码中的某些内容正在执行单独的
GET/insertEvent
调用,要想知道它是什么,一种方法是首先不允许该调用。它们不会收到任何错误,也不会受到影响。但我们收到异常电子邮件,因为我们记录了系统中发生的所有异常。用户继续并完成他们的操作。这是因为他们的文章从双对是成功的。问题是,为什么一些用户/浏览器在JS明确指定帖子的情况下同时提交GET和POST。在调用
ajax
之后,您是否有重定向语句?我没有看到任何关于
success
的回调。请求发送后会发生什么?它中断是什么意思?具体错误是什么?正如您所提到的,
Required请求主体…
错误可能是由于
GET
引起的。顺便说一句:为端点指定HTTP方法是一种很好的做法。
GET/insertEvent
对您的应用程序有意义吗?如果不允许,则指定例如
@PostMapping
将导致该端点按预期返回
405不允许的方法。也许这会让你注意到这个
GET
的确切来源。正如我在顶部的更新中所说,问题是POST和GET都是为一些罕见的用户提交的。任何用户都不应该有
GET/insertEvent
。有些东西正在为那些非常罕见的用户提交一对POST/GET。是的,但你也说过发生这种情况的用户不受影响。那么他们是收到了错误,还是没有受到影响?很可能您的客户端代码中的某些内容正在执行单独的
GET/insertEvent
调用,要想知道它是什么,一种方法是首先不允许该调用。它们不会收到任何错误,也不会受到影响。但我们收到异常电子邮件,因为我们记录了系统中发生的所有异常。用户继续并完成他们的操作。这是因为他们的文章从双对是成功的。问题是,为什么一些用户/浏览器在JS明确指定帖子的情况下同时提交GET和POST。在调用
ajax
之后,您是否有重定向语句?我没有看到任何关于
success
的回调。发送请求后会发生什么?