宁晋网站开发/推荐6个免费国外自媒体平台
简介
在实际项目开发中,总会出现各种各样的异常信息,如:ArithmeticException
、NullpointException
还有自定义异常
等。
当出现异常时,往往直接发往了客户端,导致数据整体格式显示异常和不美观的现象,如果优雅的显示或返回异常信息,这种操作很关键。
测试案例
本次测试采取Springboot版本为:2.1.14.RELEASE
。
依赖引入
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.14.RELEASE</version></parent><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 阿里巴巴json --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.44</version></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.6</version><scope>provided</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>
定义一个请求类
@RestController
public class ExceptionController {@RequestMapping("/testEX")public String testEX() {int a = 10/0;return "success";}
}
请求测试
直接白板显示报错信息,不够美观。增加全局异常配置拦截过滤,当有异常时,返回异常信息。
配置全局异常
@RestControllerAdvice
//@ControllerAdvice //根据需要监测的controller上的注解区分使用
public class ExceptionAdvice{@ExceptionHandler(value = ArithmeticException.class)public String arithmeticException(Exception e) {return "出现异常,异常信息为:"+e;}
}
这样的提示信息,相比之前的白板,就幽雅美观了很多。其次还能自定义异常操作。
自定义异常
public class MyException extends RuntimeException {private static final long serialVersionUID = -261801339539851004L;private String errMsg;public String getErrMsg() {return errMsg;}public void setErrMsg(String errMsg) {this.errMsg = errMsg;}public MyException(String errMsg) {super();this.errMsg = errMsg;}}
至于继承RuntimeException
还是继承Exception
都没什么关系。
然后定义一个请求接口,针对某些请求抛出异常信息。
@RequestMapping("/testEX2")public String testEX2(String name) {if("11".equals(name)) {throw new MyException("出现异常了。。。。");}return "success";}
当然,不加全局异常捕获,一样出现白板提示界面。
增加一个异常全局监控
,捕获全局异常信息(或指定异常),返回重要的信息。
@ExceptionHandler(value = MyException.class)public String myException(MyException e) {return "出现MyException,异常信息为:"+e.getErrMsg();}
请求异常测试:
结语
正常来说,开发采取前后分离方式,会采取json方式实现数据的交互传输,在全局异常信息中,返回json信息也可以,此处为了方便理解,未添加json返回类型。