我正在使用oauth2resttemplate调用的Restservice返回状态代码为403的响应。我看到我的ClientHttpRequestInterceptor日志行注入了resttemplate。
这是拦截请求和响应的拦截器。 traceResponse()将响应状态代码记录为403,这是我期望的。
public class RequestInterceptor implements ClientHttpRequestInterceptor {
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
try
{
traceRequest(request, body);
} catch (Exception e)
{
ManagerLog.alertLog("Exception occurred", e);
}
ClientHttpResponse response = execution.execute(request, body);
traceResponse(response);
return response;
}
private void traceRequest(HttpRequest request, byte[] body) throws Exception {
ManagerLog.infoLog("===========================request begin================================================");
ManagerLog.infoLog("URI : "+request.getURI());
ManagerLog.infoLog("Method : "+request.getMethod());
ManagerLog.infoLog("Headers : "+request.getHeaders() );
ManagerLog.infoLog("Request body : "+new String(body, "UTF-8"));
ManagerLog.infoLog("==========================request end================================================");
}
private void traceResponse(ClientHttpResponse response) throws IOException {
ManagerLog.infoLog("============================response begin==========================================");
ManagerLog.infoLog("Response Status code : "+ response.getStatusCode());
ManagerLog.infoLog("Response Status text : "+ response.getStatusText());
ManagerLog.infoLog("Response Headers : "+ response.getHeaders());
// ManagerLog.infoLog("Response body : "+ StreamUtils.copyToString(response.getBody(), Charset.defaultCharset()));
ManagerLog.infoLog("=======================response end=================================================");
}
}
但是在这里我看到的是400而不是403.但我在Spring源代码中看到它实际上硬编码为InvalidGrantException的父类(OAuth2Exception.java)中的400。
try{
objectResponseEntity = oauth2RestTemplate.exchange(url, httpMethod, httpEntity, pojo) -- throws an InvalidGrantException
} catch (HttpStatusCodeException e)
{
...
} catch(InvalidGrantException e)
{
errorCode = e.getHttpErrorCode(); -- was expecting 403 but returning 400
...
}
如何从异常中获取实际的http响应代码?