Spring Boot RestTemplate 兼容处理非 200 状态码的请求

Spring Boot RestTemplate About 1,040 words

需求

RestTemplate在处理状态码非200请求时,会抛出异常,需兼容处理异常。如:下游服务返回错误状态码401,而RestTemplate会直接报错。

代码

主要是设置RestTemplateErrorHandler。默认的错误处理器是DefaultResponseErrorHandler,它会判断HTTP状态码是否是400系列和500系列错误,

RestTemplate restTemplate = new RestTemplate();
restTemplate.setErrorHandler(new ResponseErrorHandler() {
    @Override
    public boolean hasError(ClientHttpResponse response) throws IOException {
        System.out.println("has error: " + response);
        return false;
    }

    @Override
    public void handleError(ClientHttpResponse response) throws IOException {
        System.out.println("handler error: " + response);
    }
});
RequestEntity<?> requestEntity = new RequestEntity<>(HttpMethod.GET, URI.create("http://localhost:8081/api/test"));
ResponseEntity<?> response = restTemplate.exchange(requestEntity, Object.class);

备注

如果指定转换的是Object对象,则会返回下游服务返回的内容。

如果指定转换的不是Object对象,而是特定的对象,如:Response

(状态码会跟随下游服务返回的状态码)

@Data
public class Response {

    private String id;

    private String name;

}

则会返回字段都会nullJSON字符串。

{"id":null,"name":null}
Views: 160 · Posted: 2024-04-06

————        END        ————

Give me a Star, Thanks:)

https://github.com/fendoudebb/LiteNote

扫描下方二维码关注公众号和小程序↓↓↓

扫描下方二维码关注公众号和小程序↓↓↓


Today On History
Browsing Refresh