spring拦截系统异常,如404,405等

非spring自己处理的异常可以直接通过@RestControllerAdvice+@ExceptionHandler来处理

但是有些异常spring自己处理了,如404,405,HttpRequestMethodNotSupportedException等,无法直接使用以上来捕获。

可以通过如下方法:

(1)在application.yml加上如下配置

spring:
  mvc:
    #出现错误时, 直接抛出异常。配合SpringExceptionHandler使用
    throw-exception-if-no-handler-found: true
  resources:
    #不要为我们工程中的资源文件建立映射。配合SpringExceptionHandler使用
    add-mappings: false

(2)handler类

@RestControllerAdvice
@RequestMapping( value = "/error")//注意,这里重要
public class SpringExceptionHandler {
	
    @ExceptionHandler(Exception.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public BaseR<String> handleException(Exception e) {
        log.error("系统异常2", e.getMessage());
        return  BaseR.failed(e.getMessage());
    }
    
    @ExceptionHandler(RuntimeException.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public BaseR<String> exceptionHandler(RuntimeException e) {
        log.error("runtime 异常2", e);
        return BaseR.failed(e.getMessage());
    }
	    
	@ExceptionHandler(HttpRequestMethodNotSupportedException.class)
    public BaseR<String>  httpRequestMethodNotSupportedException(HttpServletResponse response) {
        return BaseR.failed("method 方法不支持");
    }

    @ExceptionHandler(HttpMediaTypeNotSupportedException.class)
    public BaseR<String> httpMediaTypeNotSupportedException(HttpServletResponse response) {
        return BaseR.failed( "不支持媒体类型");
    }

    @ExceptionHandler(NoHandlerFoundException.class)
    @ResponseStatus(HttpStatus.NOT_FOUND)
    public BaseR<String> notFoundPage404() {
        return BaseR.failed("没有找到访问资源");
    }
    @RequestMapping(value = "/401")
    public BaseR<String> forbidden401() {
        return BaseR.failed("没有访问权限");
    }
    @RequestMapping(value = "/403")
    public BaseR<String> forbidden403(HttpServletResponse response) {
        return BaseR.failed("没有访问权限");
    }
    

 

相关推荐
©️2020 CSDN 皮肤主题: 成长之路 设计师:Amelia_0503 返回首页
实付 49.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值