Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SpringBoot-HttpMessageNodeTableException:JSON解析错误:java.net.SocketTimeoutException_Java_Spring Boot_Embedded Tomcat - Fatal编程技术网

SpringBoot-HttpMessageNodeTableException:JSON解析错误:java.net.SocketTimeoutException

SpringBoot-HttpMessageNodeTableException:JSON解析错误:java.net.SocketTimeoutException,java,spring-boot,embedded-tomcat,Java,Spring Boot,Embedded Tomcat,我的代码抛出一个异常,如下所示 JSON parse error: java.net.SocketTimeoutException; nested exception is com.fasterxml.jackson.databind.JsonMappingException: java.net.SocketTimeoutException (through reference chain: java.util.ArrayList[9]) org.springframework.http.con

我的代码抛出一个异常,如下所示

JSON parse error: java.net.SocketTimeoutException; nested exception is com.fasterxml.jackson.databind.JsonMappingException: java.net.SocketTimeoutException (through reference chain: java.util.ArrayList[9])
org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: java.net.SocketTimeoutException; nested exception is com.fasterxml.jackson.databind.JsonMappingException: java.net.SocketTimeoutException (through reference chain: java.util.ArrayList[9])
        at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:245) ~[spring-web-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
        at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:227) ~[spring-web-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
        at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:204) ~[spring-webmvc-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
        at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:157) ~[spring-webmvc-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
        at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:130) ~[spring-webmvc-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
        at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:127) ~[spring-web-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
        at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:167) ~[spring-web-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134) ~[spring-web-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) ~[spring-webmvc-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892) ~[spring-webmvc-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) ~[spring-webmvc-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1039) [spring-webmvc-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]
我的spring启动版本是2.1.7.0版本,嵌入式tomcat用于运行应用程序。 我还设置了属性
server.connection timeout=30s

我几乎到处搜索,找不到这个问题的根本原因。我还捕获此异常并将其打印在日志中,并将响应作为BAD_请求返回

此异常是间歇性引发的,此时我的生产服务器消耗了80%以上的CPU和内存

这实际上是一个POST请求,请求主体验证如下

    @RequestMapping( value = "/save", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE )
    public SaveDto create( @RequestBody @Valid SaveDto saveDto,
        HttpServletResponse response, HttpServletRequest request )
    {
      //my logic
    }
@JsonInclude( JsonInclude.Include.NON_NULL )
public class SaveDto
{
    private String id;
    @Size( min = 1 )
    @Valid
    private List< SaveEntryDto > saveLogEntries;
}
public class SaveEntryDto implements Comparable<SaveEntryDto> {
    private String id;
    private String idRef;
    private WER wer;
    @Min(0)
    @Max(1440)
    private Integer kjh;
    @Min(0)
    @Max(1440)
    private Integer gfd;
    private String abc;
    private Double def;
    private String ghi;
    private Boolean klm = Boolean.FALSE;
    private Boolean hug;
    private Boolean qwe;
    private Double azx;
    private Double xds;
    private Boolean cvf = Boolean.FALSE;
    private Boolean bgh = Boolean.FALSE;
    private String nmj;
    private Boolean rgh;
    private Boolean jkh;
    private Boolean mkl = Boolean.FALSE;
    private Boolean wed = Boolean.FALSE;
    private Long ftu;
    private XYZ xyzxd;
    private String klp;
    private ABC xxz;
    private Boolean llo;
    private Long iop;
    private Double poi;
    private Boolean uyt = Boolean.FALSE;
    private Boolean rew = Boolean.FALSE;
    private String qsd;
}
我的存盘如下

    @RequestMapping( value = "/save", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE )
    public SaveDto create( @RequestBody @Valid SaveDto saveDto,
        HttpServletResponse response, HttpServletRequest request )
    {
      //my logic
    }
@JsonInclude( JsonInclude.Include.NON_NULL )
public class SaveDto
{
    private String id;
    @Size( min = 1 )
    @Valid
    private List< SaveEntryDto > saveLogEntries;
}
public class SaveEntryDto implements Comparable<SaveEntryDto> {
    private String id;
    private String idRef;
    private WER wer;
    @Min(0)
    @Max(1440)
    private Integer kjh;
    @Min(0)
    @Max(1440)
    private Integer gfd;
    private String abc;
    private Double def;
    private String ghi;
    private Boolean klm = Boolean.FALSE;
    private Boolean hug;
    private Boolean qwe;
    private Double azx;
    private Double xds;
    private Boolean cvf = Boolean.FALSE;
    private Boolean bgh = Boolean.FALSE;
    private String nmj;
    private Boolean rgh;
    private Boolean jkh;
    private Boolean mkl = Boolean.FALSE;
    private Boolean wed = Boolean.FALSE;
    private Long ftu;
    private XYZ xyzxd;
    private String klp;
    private ABC xxz;
    private Boolean llo;
    private Long iop;
    private Double poi;
    private Boolean uyt = Boolean.FALSE;
    private Boolean rew = Boolean.FALSE;
    private String qsd;
}
@JsonInclude(JsonInclude.Include.NON_NULL)
公共类SaveDto
{
私有字符串id;
@尺寸(最小值=1)
@有效的
私有列表saveLogEntries;
}
我的储蓄账户如下

    @RequestMapping( value = "/save", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE )
    public SaveDto create( @RequestBody @Valid SaveDto saveDto,
        HttpServletResponse response, HttpServletRequest request )
    {
      //my logic
    }
@JsonInclude( JsonInclude.Include.NON_NULL )
public class SaveDto
{
    private String id;
    @Size( min = 1 )
    @Valid
    private List< SaveEntryDto > saveLogEntries;
}
public class SaveEntryDto implements Comparable<SaveEntryDto> {
    private String id;
    private String idRef;
    private WER wer;
    @Min(0)
    @Max(1440)
    private Integer kjh;
    @Min(0)
    @Max(1440)
    private Integer gfd;
    private String abc;
    private Double def;
    private String ghi;
    private Boolean klm = Boolean.FALSE;
    private Boolean hug;
    private Boolean qwe;
    private Double azx;
    private Double xds;
    private Boolean cvf = Boolean.FALSE;
    private Boolean bgh = Boolean.FALSE;
    private String nmj;
    private Boolean rgh;
    private Boolean jkh;
    private Boolean mkl = Boolean.FALSE;
    private Boolean wed = Boolean.FALSE;
    private Long ftu;
    private XYZ xyzxd;
    private String klp;
    private ABC xxz;
    private Boolean llo;
    private Long iop;
    private Double poi;
    private Boolean uyt = Boolean.FALSE;
    private Boolean rew = Boolean.FALSE;
    private String qsd;
}
public类saventrydto实现可比较的{
私有字符串id;
私有字符串idRef;
私营企业;
@最小值(0)
@最高(1440)
私有整数kjh;
@最小值(0)
@最高(1440)
私有整数gfd;
私人字符串abc;
私人双重定义;
私人字符串ghi;
私有布尔klm=Boolean.FALSE;
私人布尔拥抱;
私有布尔qwe;
私人双azx;
私人双xds;
私有布尔cvf=Boolean.FALSE;
私有布尔bgh=Boolean.FALSE;
私有字符串nmj;
私有布尔rgh;
私有布尔jkh;
私有布尔值mkl=Boolean.FALSE;
私有布尔wed=Boolean.FALSE;
私营工联会;
私有XYZ xyzxd;
私人字符串klp;
私人ABC xxz;
私有布尔逻辑;
私人长眼压;
私人双poi;
私有布尔值uyt=Boolean.FALSE;
私有布尔rew=Boolean.FALSE;
私有字符串qsd;
}

您发送到此端点的有效负载有多大?您能否确认您的依赖项中的嵌入式tomcat版本是什么?我认为应该是9.0.31。我遇到了类似的问题,发现Tomcat9.0.31有一个调试导致了它。这里是链接。该缺陷在9.0.33版本中已修复。它对我有用,你能试试吗?@P.J.Meisch有效载荷没有限制。在添加了一些改进的日志之后,我们可以看到大多数请求有时会抛出此异常。即使是一个非常小的负载处理api。@aks我会尝试更新版本并让您know@aks我的版本是9.0.22