• springboot 自定义异常


    利用自定义异常,可以让我们做一些自定义操作,比如实现一个不需要写 return ,就能在我们设定好的逻辑处发生错误,就自动 return 出去,从而不需要写 if 判断,再 return 的写法,从而让代码看起来更加简洁,下面简单举个列子:

    利用自定义异常,判断请求参数非空,若是空,就自动 return 出去:

    1、定义一个自定义异常类,继承想继承的异常,这里继承运行时异常 RuntimeException【ResponseStatusEnum 枚举类和 ResultsBean 格式类可以看上一篇全局异常操作】

    package com.sinosig.ewp.wx.service.config;
    
    /**
     * @author Mongo
     * @return
     */
    public class MyCustomException extends RuntimeException{
        
        private ResponseStatusEnum responseStatusEnum;
        
        public MyCustomException(ResponseStatusEnum responseStatusEnum,String msg) {
            responseStatusEnum.setMsg(msg);
            this.responseStatusEnum = responseStatusEnum;
        }
        
        public ResponseStatusEnum getResponseStatusEnum() {
            return responseStatusEnum;
        }
        
        public void setResponseStatusEnum(ResponseStatusEnum responseStatusEnum) {
            this.responseStatusEnum = responseStatusEnum;
        }
        
    }

    2、在全局异常类中引入:

    package com.sinosig.ewp.wx.service.config;
    
    import com.sinosig.ewp.common.base.ResultDTO;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.RestControllerAdvice;
    
    /**
     * @author Mongo
     * @return
     */
    @RestControllerAdvice
    @Slf4j
    public class GraceExceptionHandler {
        
        /**
         * 全局异常捕获
         * @param e
         * @return
         */
        @ExceptionHandler(Exception.class)
        @ResponseBody
        public Object returnException(Exception e) {
            log.error("error",e);
            return ResultsBean.build(500,"全局异常啦啦啦");
        }
        
        /**
         * 自定义验证参数非空异常
         * @param e
         * @return
         */
        @ExceptionHandler(MyCustomException.class)
        @ResponseBody
        public Object returnMyCustomException(MyCustomException e) {
            log.info("异常为:"+e.getMessage());
            return ResultsBean.exception(e.getResponseStatusEnum());
        }
    
    }

    3、参数非空判断工具类

    package com.sinosig.ewp.wx.service.config;
    
    import lombok.extern.slf4j.Slf4j;
    import org.apache.commons.lang3.StringUtils;
    import org.springframework.stereotype.Component;
    
    /**
     * @author Mongo
     * @return
     */
    @Component
    @Slf4j
    public class ParamUtils {
        
        /**
         * 字符串类型参数非空判断
         * param 要判断的字符串字段
         * msg 若为空要提示的文字
         */
        public static String nullString(String param, String msg){
            if(StringUtils.isBlank(param)){
                throw new MyCustomException(ResponseStatusEnum.PARAM_NULL,msg);
            }
            return param;
        }
        
        /**
         * 任意类型参数非空判断
         * param 要判断的任意字段
         * o 想返回的参数类型
         * msg 若为空要提示的文字
         */
        public static <T> T nullParam(Object param,Class<T> o, String msg){
            if(param == null){
                throw new MyCustomException(ResponseStatusEnum.PARAM_NULL,msg);
            }
            if(param instanceof String){
                if(StringUtils.isBlank(String.valueOf(param))){
                    throw new MyCustomException(ResponseStatusEnum.PARAM_NULL,msg);
                }
            }
            return (T) param;
        }
    }

    4、最后测试类

    package com.sinosig.ewp.wx.service.controller;
    
    import com.sinosig.ewp.wx.service.config.ParamUtils;
    import com.sinosig.ewp.wx.service.config.ResultsBean;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.web.bind.annotation.*;
    
    /**
     * @author Mongo
     * @return
     */
    @Slf4j
    @CrossOrigin
    @RestController
    public class TestsController {
        
        @PostMapping(value = "/demo1")
        public ResultsBean demo1(@RequestBody ParamBean paramBean){
            System.out.println("==开始测试==");
            //这里 id 和 name 不再需要 if 判断了,如果为空,会自动 return 出去。
            Integer id = ParamUtils.nullParam(paramBean.getId(), Integer.class, "请求 id 不能为空");
            String name = ParamUtils.nullString(paramBean.getName(), "请求姓名不能为空");
            System.out.println("id = " + id);
            System.out.println("name = " + name);
            System.out.println("==结束测试==");
            return ResultsBean.ok();
        }
        
    }

    结果如下:

    (1)正常都有数据时:

     (2)id 没有数据时:

     (3)name 没有数据时:

     

  • 相关阅读:
    PHP之PHPExcel X
    Docker之基础(一) X
    Django Admin之常用功能汇总 X
    pycharm中配置启动Django项目 X
    银联支付接入新一代 X
    pycharm集成Jupyter Notebook X
    Django之model外键 X
    Django之添加prometheus监控 X
    Yii2 中配置方法汇总 X
    python常用模块汇总 X
  • 原文地址:https://www.cnblogs.com/xuehuashanghe/p/16375766.html
Copyright © 2020-2023  润新知