zoukankan      html  css  js  c++  java
  • springboot全局异常处理

    参考链接1

    前言

    ​ 一个项目总会出现错误,而我们需要将其中的某些错误用自己的方式去处理 ,这时候就会用到springmvc的全局异常处理了;当然,还有其他的方式去处理这些异常,这里就不讨论了;

    ​ springboot有一个默认的异常处理,但是自己感觉还没有达到自己的预想,需要自己对异常进行简单的处理,于是就有了这篇文章。

    ​ 注意,我是使用idea直接构建的springboot项目;

    正文

    注解说明

    以下是全局异常处理主要用到的两个注解:

    @ControllerAdvice

    1. 该注解主要用于类上
    2. 该注解的主要参数basePackages:处理某一个包下面的异常

    @ExceptionHandler

    1. 用于方法上
    2. 里面只有一个value参数,这个参数就是需要处理的异常的ExceptionName.class,那么这个方法就会只处理这个错误,其他的错误就不会处理;

    用到的代码

    ​ 在项目中新建两个类

    • controller类
    @RestController
    @RequestMapping("/test")
    public class TestController {
    
        @GetMapping("/one")
        public String testOne(@RequestParam(name = "test")String test){
            return "success";
        }
    }
    
    • 异常处理类
    @ControllerAdvice
    public class GlobalExceptionHandler {
        
        @ExceptionHandler(ExceptionName.class)
        public void test(参数1,参数2.....){
            //自己的处理方式
        }
    }
    

    方法上还可以用其它允许的注解,视个人而定,参数也是可以自己添加,但是需要添加的参数必须是要被允许的;

    测试

    ​ 启动项目进行以下测试,这里自己小小的实验了一把,自己定义一个请求,里面会需要一个test参数,而且还是get请求,接下来看用各种请求会出现深结果,然后自己处理后的结果;

    1. get请求不带test参数,我用的postman来发送的请求,且异常处理类中不写处理

    在postman端请求出现的结果:

    {
        "timestamp": "2018-08-07T02:32:25.262+0000",
        "status": 400,
        "error": "Bad Request",
        "message": "Required String parameter 'test' is not present",
        "path": "/test/one"
    }
    

    ​ 但是为了更直接一点,我们对这个错误进一步进行了处理;

    ​ 在异常处理类中添加以下代码:

      @ExceptionHandler(MissingServletRequestParameterException.class)
        @ResponseBody
        public String test(MissingServletRequestParameterException e, HttpServletRequest request){
            System.out.println(e.toString());
            System.out.println("请求地址:"+request.getRequestURL());
            return "请求地址:"+request.getRequestURL()+"缺少请求参数";
        }
    

    ​ 这里处理的错误为MissingServletRequestParameterException,也就是除此之外的错误都不会处理

    ​ 请求结果:

    请求地址:http://localhost:8080/test/one缺少请求参数
    
    1. post请求,带test参数,异常处理类中不处理;

      不处理出现的结果:

    {
        "timestamp": "2018-08-07T03:12:00.503+0000",
        "status": 405,
        "error": "Method Not Allowed",
        "message": "Request method 'POST' not supported",
        "path": "/test/one"
    }
    

    ​ 在异常类中添加以下代码:

    @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
        @ResponseBody
        public String testTwo(HttpRequestMethodNotSupportedException e, HttpServletRequest request){
            System.out.println(e.toString());
            System.out.println("请求地址:"+request.getRequestURL());
            return "请求地址:"+request.getRequestURL()+"请求方式错误";
        }
    

    添加代码后的请求结果:

    请求地址:http://localhost:8080/test/one请求方式错误
    

    最后

    ​ 其实以上的测试只是一个实验,也许在现实开发中出现以上的错误一眼就能看出哪里错了;但是为了更明显的说明错误,就自己进行了处理;

    总结

    十分感谢你能看完这篇文章!

  • 相关阅读:
    初识spring boot
    javascript的console命令
    (转)三角函数计算,Cordic 算法入门
    (原+转)ROC曲线
    (转)(VS2013 )由于应用程序配置不正确,程序未能启动”--原因及解决方法
    (转)最小二乘法拟合圆公式推导及vc实现[r]
    (原)Eclipse中将JNI生成的so打包成jar的步骤
    (原)Eclipse的java中文件读写
    (原)Microsoft Source Reader的简单使用
    (转)android ndk 给结构体赋值的方法
  • 原文地址:https://www.cnblogs.com/guoyuchuan/p/9467415.html
Copyright © 2011-2022 走看看