加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

SpringBoot 处理异常的几种常见姿势

发布时间:2019-08-30 12:26:03 所属栏目:建站 来源:java互联网架构
导读:一、行使 @ControllerAdvice 和 @ExceptionHandler 处理赏罚全局非常 这是今朝很常用的一种方法,很是保举。测试代码顶用到了 Junit 5,假如你新建项目验证下面的代码的话,记得添加上相干依靠。 1. 新建非常信息实体类 非须要的类,首要用于包装非常信息。 sr
副问题[/!--empirenews.page--]

SpringBoot 处理赏罚非常的几种常见姿势

一、行使 @ControllerAdvice 和 @ExceptionHandler 处理赏罚全局非常

这是今朝很常用的一种方法,很是保举。测试代码顶用到了 Junit 5,假如你新建项目验证下面的代码的话,记得添加上相干依靠。

1. 新建非常信息实体类

非须要的类,首要用于包装非常信息。

src/main/java/com/twuc/webApp/exception/ErrorResponse.java

  1. /** 
  2.  * @author shuang.kou 
  3.  */ 
  4. public class ErrorResponse { 
  5.  private String message; 
  6.  private String errorTypeName; 
  7.  public ErrorResponse(Exception e) { 
  8.  this(e.getClass().getName(), e.getMessage()); 
  9.  } 
  10.  public ErrorResponse(String errorTypeName, String message) { 
  11.  this.errorTypeName = errorTypeName; 
  12.  this.message = message; 
  13.  } 
  14.  ......省略getter/setter要领 

2. 自界说非常范例

src/main/java/com/twuc/webApp/exception/ResourceNotFoundException.java

一样平常我们处理赏罚的都是 RuntimeException ,以是假如你必要自界说非常范例的话直接集成这个类就可以了。

  1. /** 
  2.  * @author shuang.kou 
  3.  * 自界说非常范例 
  4.  */ 
  5. public class ResourceNotFoundException extends RuntimeException { 
  6.  private String message; 
  7.  public ResourceNotFoundException() { 
  8.  super(); 
  9.  } 
  10.  public ResourceNotFoundException(String message) { 
  11.  super(message); 
  12.  this.message = message; 
  13.  } 
  14.  @Override 
  15.  public String getMessage() { 
  16.  return message; 
  17.  } 
  18.  public void setMessage(String message) { 
  19.  this.message = message; 
  20.  } 

3. 新建非常处理赏罚类

我们只必要在类上加上@ControllerAdvice注解这个类就成为了全局非常处理赏罚类,虽然你也可以通过 assignableTypes指定特定的 Controller 类,让非常处理赏罚类只处理赏罚特定类抛出的非常。

src/main/java/com/twuc/webApp/exception/GlobalExceptionHandler.java

  1. /** 
  2.  * @author shuang.kou 
  3.  */ 
  4. @ControllerAdvice(assignableTypes = {ExceptionController.class}) 
  5. @ResponseBody 
  6. public class GlobalExceptionHandler { 
  7.  ErrorResponse illegalArgumentResponse = new ErrorResponse(new IllegalArgumentException("参数错误!")); 
  8.  ErrorResponse resourseNotFoundResponse = new ErrorResponse(new ResourceNotFoundException("Sorry, the resourse not found!")); 
  9.  @ExceptionHandler(value = Exception.class)// 拦截全部非常, 这里只是为了演示,一样平常环境下一个要领特定处理赏罚一种非常 
  10.  public ResponseEntity<ErrorResponse> exceptionHandler(Exception e) { 
  11.  if (e instanceof IllegalArgumentException) { 
  12.  return ResponseEntity.status(400).body(illegalArgumentResponse); 
  13.  } else if (e instanceof ResourceNotFoundException) { 
  14.  return ResponseEntity.status(404).body(resourseNotFoundResponse); 
  15.  } 
  16.  return null; 
  17.  } 

4. controller模仿抛出非常

src/main/java/com/twuc/webApp/web/ExceptionController.java

  1. /** 
  2.  * @author shuang.kou 
  3.  */ 
  4. @RestController 
  5. @RequestMapping("/api") 
  6. public class ExceptionController { 
  7.  @GetMapping("/illegalArgumentException") 
  8.  public void throwException() { 
  9.  throw new IllegalArgumentException(); 
  10.  } 
  11.  @GetMapping("/resourceNotFoundException") 
  12.  public void throwException2() { 
  13.  throw new ResourceNotFoundException(); 
  14.  } 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读