Java 在没有定义错误解码器的情况下,外部客户端中的抛出声明是否无效?
我有一个像这样的假客户Java 在没有定义错误解码器的情况下,外部客户端中的抛出声明是否无效?,java,spring,spring-boot,spring-cloud,spring-cloud-feign,Java,Spring,Spring Boot,Spring Cloud,Spring Cloud Feign,我有一个像这样的假客户 @FeignClient(name=“client”) 公共接口客户端{ @请求行(“获取/?q={q}”) void execute(uribaseurl,@Param(“q”)String q)抛出一些ExceptionInMyCode; } 查看此会引发一些异常nMyCode我在问自己何时会引发此异常。没有为客户端定义的配置,没有错误解码器。异常看起来像这样 公共类SomeExceptionInMyCode扩展异常{ 专用最终int状态码; 私人最终字符串原因;
@FeignClient(name=“client”)
公共接口客户端{
@请求行(“获取/?q={q}”)
void execute(uribaseurl,@Param(“q”)String q)抛出一些ExceptionInMyCode;
}
查看此会引发一些异常nMyCode
我在问自己何时会引发此异常。没有为客户端定义的配置,没有错误解码器。异常看起来像这样
公共类SomeExceptionInMyCode扩展异常{
专用最终int状态码;
私人最终字符串原因;
私有最终字符串体;
//接球手和接球手
}
如果出现故障,是否会自动尝试解码HTTP对此异常的响应?或者抛出一些异常nMyCode
是无用的,可以在没有任何影响的情况下删除
我在我的代码中搜索,但从未创建此异常
如果出现故障,是否会自动尝试解码http对此异常的响应
不,它不是这样工作的,并且不会抛出SomeExceptionMyCode
。抛出
子句是无用的。即使端点从其实现中抛出此异常,它也将被包装为导致FeignException
处理外部客户端异常的正确方法是使用实现ErrorDecoder
:
public class StashErrorDecoder implements ErrorDecoder {
@Override
public Exception decode(String methodKey, Response response) {
if (response.status() >= 400 && response.status() <= 499) {
// return 4XX exception
}
if (response.status() >= 500 && response.status() <= 599) {
// return 5XX exception
}
}
}
如果
stasherrordecommer
抛出一个选中的异常怎么办?这是允许的。在这种情况下,在接口中抛出
子句肯定会有所帮助。通过这种方式,您可以捕获并处理由Feign引发的异常。至少应该是这样
@RestControllerAdvice
public class ExceptionHandler {
@ExceptionHandler(FeignException.class)
public String handleFeignStatusException(FeignException e, HttpServletResponse response) {
// ...
}
}