SpringBoot异常处理

  • A+

在Spring若在请求期间发生错误,则调度器DispatcherServlet将委托HandlerExceptionResolver类来处理异常;而在SpringBoot中默认提供了/error映射,来解决异常,定义在ErrorController类中,他的主要功能是将错误信息写入页面或者以json格式返回给前端展示。

1.定制异常处理器

  • 在SpringBoot中定义全局的异常处理类,它将捕获MyException异常,并返回自定义信息
    @ControllerAdvice
    public class GlobalExceptionHandler {
        @ExceptionHandler(MyException.class)
        @ResponseBody
        ResponseEntity<?> handleControllerException(HttpServletRequest request, MyException ex) {
            Map<String,Object> rMap = new HashMap<>();
            rMap.put("status",100);
            rMap.put("message",ex.getMessage());
            return new ResponseEntity<>(rMap, HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }
    
  • 自定义异常类
    public class MyException extends Exception {
        public MyException(String message) {
            super(message);
        }
    }
    
  • Controller类中
    @RestController
    public class ExceptionController {
    
        @GetMapping
        public void   testExceptionMap() throws MyException {
            throw  new MyException("抛出自定义错误");
        }
    }
    

2.详解

  • 可用@RestControllerAdvice注解替换@ControllerAdvice@ResponseBody
  • @ControllerAdvice注解有basePackages和basePackageClasses属性,分别表示捕获指定包下或者指定类下的异常信息。
  • @ExceptionHandler标注方法参数支持范围javax.servlet.ServletRequestjavax.servlet.ServletResponse@RequestAttribute等,具体可见官方说明

3.总结

zhangfeng

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: