| 副标题[/!--empirenews.page--] 
 一、使用 @ControllerAdvice 和 @ExceptionHandler 处理全局异常 这是目前很常用的一种方式,非常推荐。测试代码中用到了 Junit 5,如果你新建项目验证下面的代码的话,记得添加上相关依赖。 1. 新建异常信息实体类 非必要的类,主要用于包装异常信息。 src/main/java/com/twuc/webApp/exception/ErrorResponse.java /**  * @author shuang.kou  */ public class ErrorResponse {  private String message;  private String errorTypeName;  public ErrorResponse(Exception e) {  this(e.getClass().getName(), e.getMessage());  }  public ErrorResponse(String errorTypeName, String message) {  this.errorTypeName = errorTypeName;  this.message = message;  }  ......省略getter/setter方法 } 
 2. 自定义异常类型 src/main/java/com/twuc/webApp/exception/ResourceNotFoundException.java 一般我们处理的都是 RuntimeException ,所以如果你需要自定义异常类型的话直接集成这个类就可以了。 /**  * @author shuang.kou  * 自定义异常类型  */ public class ResourceNotFoundException extends RuntimeException {  private String message;  public ResourceNotFoundException() {  super();  }  public ResourceNotFoundException(String message) {  super(message);  this.message = message;  }  @Override  public String getMessage() {  return message;  }  public void setMessage(String message) {  this.message = message;  } } 
 3. 新建异常处理类 我们只需要在类上加上@ControllerAdvice注解这个类就成为了全局异常处理类,当然你也可以通过 assignableTypes指定特定的 Controller 类,让异常处理类只处理特定类抛出的异常。 src/main/java/com/twuc/webApp/exception/GlobalExceptionHandler.java /**  * @author shuang.kou  */ @ControllerAdvice(assignableTypes = {ExceptionController.class}) @ResponseBody public class GlobalExceptionHandler {  ErrorResponse illegalArgumentResponse = new ErrorResponse(new IllegalArgumentException("参数错误!"));  ErrorResponse resourseNotFoundResponse = new ErrorResponse(new ResourceNotFoundException("Sorry, the resourse not found!"));  @ExceptionHandler(value = Exception.class)// 拦截所有异常, 这里只是为了演示,一般情况下一个方法特定处理一种异常  public ResponseEntity<ErrorResponse> exceptionHandler(Exception e) {  if (e instanceof IllegalArgumentException) {  return ResponseEntity.status(400).body(illegalArgumentResponse);  } else if (e instanceof ResourceNotFoundException) {  return ResponseEntity.status(404).body(resourseNotFoundResponse);  }  return null;  } } 
 4. controller模拟抛出异常 src/main/java/com/twuc/webApp/web/ExceptionController.java /**  * @author shuang.kou  */ @RestController @RequestMapping("/api") public class ExceptionController {  @GetMapping("/illegalArgumentException")  public void throwException() {  throw new IllegalArgumentException();  }  @GetMapping("/resourceNotFoundException")  public void throwException2() {  throw new ResourceNotFoundException();  } } 
 (编辑:宣城站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |