如何修复春季启动中发生的'HttpMessageNotReadableException'和'SocketTimeOutException'

时间:2019-06-18 12:20:30

标签: java spring spring-boot networking

我在生产环境中遇到HttpMessageNotReadableExceptionSocketTimeOutException的根本原因是我无法弄清楚,也无法复制。由于它是在生产中发生的,因此我想修复此问题,以便客户不再遇到问题。希望社区能够提供帮助。

例外

org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: (was java.net.SocketTimeoutException); nested exception is com.fasterxml.jackson.databind.JsonMappingException: (was java.net.SocketTimeoutException) (through reference chain: com.org.example.api.request.SignatureRequest["users"]->java.util.ArrayList[0])
caused by com.fasterxml.jackson.databind.JsonMappingException: (was java.net.SocketTimeoutException) (through reference chain: com.org.example.api.request.SignatureRequest["users"]->java.util.ArrayList[0]) caused by java.net.SocketTimeoutException

我已经尝试,因为邮递员点击了API可能导致的错误请求。我能够产生HttpMessageNotReadableException,但不能产生SocketTimeOutException。我们正在使用Spring Boot 2.0.4

我想弄清楚为什么会发生这种情况,以及将来如何阻止这种情况发生?

1 个答案:

答案 0 :(得分:0)

对于HttpMessageNotReadableException

如果您可以通过错误的请求重现问题,则可以通过应用验证或使用try-catch来解决问题。

对于SocketTimeOutException

防止SocketTimeoutException,一种有效处理套接字超时的方法是定义一个连接超时,然后再使用try-catch块来处理它。

示例:

HttpUrlConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(7000); //set the timeout in milliseconds