gpt4 book ai didi

response - RestTemplate - 处理异常中的响应 header /正文(RestClientException、HttpStatusCodeException)

转载 作者:行者123 更新时间:2023-12-02 22:55:05 24 4
gpt4 key购买 nike

在我的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com