多feign 响应拦截器 正常响应取结果转实体类,错误响应抛异常
时间: 2023-08-10 13:03:10 浏览: 214
您可以通过编写一个响应拦截器来实现这个功能。首先,您需要创建一个类来表示错误响应:
```java
public class ErrorResponse {
private int code;
private String message;
// getters and setters
}
```
然后,您可以编写一个响应拦截器来检查响应是否成功并将响应转换为实体类或抛出异常:
```java
public class CustomResponseInterceptor implements ResponseInterceptor {
@Override
public void onException(FeignException e, Request request) {
throw e; // rethrow the exception
}
@Override
public void onSuccessfulResponse(Response response, Request request) {
if (response.status() >= 200 && response.status() < 300) {
// response is successful, convert to entity
response.body(MyEntity.class)
} else {
// response is not successful, throw exception
ErrorResponse errorResponse = response.body(ErrorResponse.class);
throw new MyFeignException(errorResponse.getCode(), errorResponse.getMessage());
}
}
}
```
在上面的代码中,我们首先检查响应的状态码是否为成功状态码(在这里,我们使用了 200 到 299 之间的状态码)。如果响应是成功的,我们可以使用 `response.body()` 方法将响应转换为实体类。如果响应不成功,则使用相同的方法将响应转换为 `ErrorResponse` 对象,并使用该对象的信息抛出自定义的 `MyFeignException` 异常。
最后,您可以将此响应拦截器添加到您的 `Feign` 客户端中:
```java
MyClient myClient = Feign.builder()
.client(new OkHttpClient())
.errorDecoder(new MyFeignErrorDecoder())
.addInterceptor(new CustomResponseInterceptor())
.target(MyClient.class, "https://myapi.com");
```
在上面的代码中,我们使用 `addInterceptor()` 方法添加响应拦截器。请注意,如果您还需要添加其他拦截器,您可以在此处添加它们。最后,您可以使用 `target()` 方法创建一个 `MyClient` 实例,并将其用于调用 API。
阅读全文