我们在我们的应用程序中有两个部分:服务器 – 提供REST服务和客户端 – 通过
Spring restTemplate消耗它们.
除了HTTP状态之外,我们的服务器还会返回具有描述错误的JSON的HTTP主体.
所以,我已经将restim错误处理程序添加到restTemplate,以将一些错误编码为非错误 – 它有助于解析HTTP身体.
但是在HTTP / 1.1 401未经授权的情况下,通过解析HTTP主体可以获得异常.
所有其他错误代码处理正常(400,402等)
我们使用普通的服务器逻辑,发送错误时发送HTTP响应,对于不同类型的错误没有特殊规则:
writeErrorToResponse(int status, String errMsg, HttpServletResponse resp) throws IOException {
response.setStatus(status);
response.setContentType(MediaType.APPLICATION_JSON_VALUE);
String message = String.format("{\"error\":\"%s\"}", StringUtils.escapeJson(errMsg));
resp.getWriter().println(message);
}
但是在客户端只有HTTP / 1.1 401抛出异常 – “java.net.HttpRetryException:由于服务器身份验证,在流式传输模式下无法重试”
我做了一些调试,看到问题的原因是SimpleClientHttpResponse中的代码:
HttpURLConnection.getInputStream()
跟Fiddle