我在生产环境中遇到了HttpMessageNotReadableException
和SocketTimeOutException
,其根本原因是我无法弄清楚,也无法复制。由于它是在生产中发生的,因此我想解决此问题,以便客户不再遇到问题。希望社区能够提供帮助。
例外
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我想弄清楚为什么会发生这种情况,以及将来如何阻止这种情况发生?
最佳答案
对于HttpMessageNotReadableException
如果您可以通过错误的请求重现该问题,则可以通过应用验证或使用try-catch来处理它们。
对于SocketTimeOutException
防止SocketTimeoutException,一种有效处理套接字超时的方法是定义一个连接超时,然后再通过使用try-catch块来处理它。
例:
HttpUrlConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(7000); //set the timeout in milliseconds