副问题[/!--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();
- }
- }
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|