java - 使用 @ControllerAdvice 进行 Spring 异常处理提供了集中控制,但我们必须在方法签名中添加所有抛出异常

标签 java spring spring-mvc spring-boot spring-cloud-feign

使用 @ControllerAdvice 进行 Spring 异常处理提供了集中控制,但我们必须在方法签名中添加所有抛出异常

for example

 public void methodA() throws feign.FeignException,IOException,InterruptedException,ExecutionException{
   //CODE
}
ExceptionHandler
@ControllerAdvice
public class SpringExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(value={feign.FeignException.class})
    public ResponseEntity<ErrorMsg> handleFeignException(Exception ex, WebRequest request){
     //CODE..
}
@ExceptionHandler(value={TimeoutException.class})
    public ResponseEntity<ErrorMsg> handleTimeoutException(Exception ex, WebRequest request){
     //CODE..
}
@ExceptionHandler(value={Exception.class})
    public ResponseEntity<ErrorMsg> handleGenericException(Exception ex, WebRequest request){
     //CODE..
}
}

这是将所有抛出异常添加到方法签名中的推荐方法吗? 如果有更好或建议的方法来声明抛出异常,请告诉我。

I have no issue with this approach but spring boot code/API Method signature looks different or lengthy.

最佳答案

如果前置条件失败,您可以从任何地方抛出异常 - 在方法内部

https://github.com/dhananjay12/learning-spring-rest/blob/master/error-handling/src/main/java/com/djcodes/spring/rest/errorhandling/EmployeeController.java

或在方法签名中。

处理 FeignException 可能有点棘手。我建议您阅读这篇文章 - https://source.coveo.com/2016/02/19/microservices-and-exception-handling/

关于java - 使用 @ControllerAdvice 进行 Spring 异常处理提供了集中控制,但我们必须在方法签名中添加所有抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51633853/

相关文章:

java - 只获取html中的href内容和src内容

mysql - 如何使用 Spring Boot 回滚 MySQL 数据库中的所有更改

java - 创建 ServletContext 资源中定义的名称为 'jsonView' 的 bean 时出错

java - Spring - 如何将文件写入类路径?

java - 为什么无论层次结构如何,GAE 实体名称都必须是唯一的?

java - 从其编号创建 Unicode 字符

java - 在 Ubuntu Linux 8+ 上作为守护进程简单启动杂项应用程序(基于 Java)

java - 添加千分尺依赖会导致奇怪的 Spring 代理问题

java - 在 java 应用程序中实现自定义 jar 时出现错误

java - Spring getJdbcTemplate().update 插入动态对象