- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 Restful Web 服务中,如果出现错误请求 (5xx) 或 4xx 响应代码,我会在响应中写入自定义 header “x-app-err-id”。
在客户端,我使用 RestTemplate 的交换方法来进行 RestFul Web 服务调用。当响应代码为 2xx 时一切正常。
ResponseEntity<Component> response = restTemplate.exchange(webSvcURL,
HttpMethod.POST,
requestEntity,
Component.class);
但是,如果由于错误请求(5xx)或 4xx 而出现异常(HttpStatusCodeException),则在 HttpStatusCodeException 的 catch block 中,我得到的响应(见上文)为 null,因此我无权访问我的我在网络服务中设置的自定义 header 。如果 RestTemplate 中出现异常,如何从响应中获取自定义 header 。
还有一个问题是,我在响应正文中设置了一个错误对象(json),以防出现错误,并且我想知道如何在 RestTemplate 中出现异常时访问响应正文
最佳答案
我终于使用 ResponseErrorHandler 做到了。
public class CustomResponseErrorHandler implements ResponseErrorHandler {
private static ILogger logger = Logger.getLogger(CustomResponseErrorHandler.class);
private ResponseErrorHandler errorHandler = new DefaultResponseErrorHandler();
public void handleError(ClientHttpResponse response) throws IOException {
List<String> customHeader = response.getHeaders().get("x-app-err-id");
String svcErrorMessageID = "";
if (customHeader != null) {
svcErrorMessageID = customHeader.get(0);
}
try {
errorHandler.handleError(response);
} catch (RestClientException scx) {
throw new CustomException(scx.getMessage(), scx, svcErrorMessageID);
}
}
public boolean hasError(ClientHttpResponse response) throws IOException {
return errorHandler.hasError(response);
}
}
然后通过如下所示的配置将这个自定义响应处理程序用于 RestTemplate
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
<property name="messageConverters">
<list>
<ref bean="jsonConverter" />
</list>
</property>
<property name="errorHandler" ref="customErrorHandler" />
</bean>
<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes" value="application/json" />
</bean>
<bean id="customErrorHandler " class="my.package.CustomResponseErrorHandler">
</bean>
关于response - RestTemplate - 处理异常中的响应 header /正文(RestClientException、HttpStatusCodeException),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7878002/
在我的 Restful Web 服务中,如果出现错误请求 (5xx) 或 4xx 响应代码,我会在响应中写入自定义 header “x-app-err-id”。 在客户端,我使用 RestTempla
我正在尝试使用以下代码连接到使用 HtmlUnit 的页面: WebClient webClient = new WebClient(); webClient.getOptions().setThro
这个问题已经有答案了: When HttpStatusCodeException exception raised? (3 个回答) 已关闭 4 年前。 org.springframework.web
我刚遇到那个问题,不明白为什么会这样。 客户端片段: try { ResponseEntity response = this.restTemplate.exchange(uri, HttpM
我不能使用多个 catch 吗?第一次捕获使用 RestClientException ,第二次捕获使用 HttpStatusCodeException try { Respons
我是一名优秀的程序员,十分优秀!