• 全局异常捕获工具类


    package com.test.commons.exception;
    
    import com.alibaba.fastjson.JSONObject;
    import com.epro.commons.response.ArgumentCode;
    import com.epro.commons.response.ResponseResult;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.util.StringUtils;
    import org.springframework.validation.BindException;
    import org.springframework.validation.BindingResult;
    import org.springframework.validation.FieldError;
    import org.springframework.validation.ObjectError;
    import org.springframework.web.bind.MethodArgumentNotValidException;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.RestControllerAdvice;
    
    import javax.validation.ConstraintViolation;
    import javax.validation.ConstraintViolationException;
    import java.util.*;
    
    /**
     * @author 
     * @description: TODO
     * @date 2021/11/3 10:43
     */
    @RestControllerAdvice
    @Slf4j
    public class RestExceptionHandler {
    
    
        /**
         * 处理Get请求的验证异常
         *
         * @param result
         * @return com.flyduck.cms.vo.ApiResult
         */
        @ExceptionHandler(BindException.class)
        public ResponseResult bindExceptionHandle(BindingResult result) {
    
            if (result.hasErrors()) {
                List errors = result.getAllErrors();
              /*  List list = new ArrayList<>();
                errors.forEach(p ->{
                    FieldError fieldError = (FieldError) p;
                    list.add(fieldError.getDefaultMessage());
                });*/
                HashSet set = new HashSet<>(errors);
                if (!errors.isEmpty() && !StringUtils.isEmpty(set.iterator().next().getDefaultMessage())) {
                    return new ResponseResult(false, ArgumentCode.PARAMS_ERROR.getCode(), set.iterator().next().getDefaultMessage(), null);
                }
    
            }
    
            return new ResponseResult(ArgumentCode.PARAMS_ERROR);
        }
    
        /**
         * 处理Post请求的验证异常
         *
         * @param exception
         * @return com.flyduck.cms.vo.ApiResult
         */
        @ExceptionHandler(MethodArgumentNotValidException.class)
        public ResponseResult methodArgumentNotValidHandler(MethodArgumentNotValidException exception) {
    
            BindingResult result = exception.getBindingResult();
            if (result != null && result.hasErrors()) {
                List errors = result.getAllErrors();
                Set set=new HashSet<>(errors);
                //ArrayList objectErrors = new ArrayList<>(set);
                // 出现参数校验异常时,只需抛出第一条即可
                FieldError fieldError = (FieldError) set.iterator().next();
                if (!errors.isEmpty() && !StringUtils.isEmpty(fieldError.getDefaultMessage())) {
                    int errorCode = ArgumentCode.PARAMS_ERROR.getCode();
                    String msg =  fieldError.getDefaultMessage();
                    return new ResponseResult(false, errorCode, msg, null);
                }
    
            }
    
            return new ResponseResult(ArgumentCode.PARAMS_ERROR);
        }
    
        /**
         * 处理请求参数格式的验证异常
         *
         * @param exception
         * @return com.flyduck.cms.vo.ApiResult
         */
        @ExceptionHandler(ConstraintViolationException.class)
        public ResponseResult constraintViolationHandler(ConstraintViolationException exception) {
            Set> violations = exception.getConstraintViolations();
            if (violations.size() > 0) {
                List list = new ArrayList<>();
                for (ConstraintViolation violation : violations) {
                    list.add(violation.getMessage());
                }
                if (!list.isEmpty()) {
                    return new ResponseResult(false, ArgumentCode.PARAMS_ERROR.getCode(), list.get(0), null);
                }
            }
    
            return new ResponseResult(ArgumentCode.PARAMS_ERROR);
        }
    
        @ExceptionHandler(CustomException.class)
        public ResponseResult exception(Exception e) {
            log.error("---------------------error:{}-------------------------", e.getMessage());
            Map map = JSONObject.parseObject(e.getMessage(), Map.class);
            return ResponseResult.create().msg((Integer) map.get("code"), (String) map.get("msg")).success((Boolean) map.get("success"));
        }
    
    }
    
  • 相关阅读:
    Linux 开放端口与监控进程
    前端性能优化:利用防抖节流实现图片懒加载
    Git安装、原理、常用命令、版本控制、如何上传普通文件到仓库以及如何修改IDEA中Terminal为git窗口
    J2EE基础-自定义MVC(下)
    zookeeper:设计目标和核心概念、zab协议简介
    搭建selenium环境
    vue面试问到的题及解决办法
    2022阿里云金秋云创季年终双十一活-动汇总!
    c++入门必学库函数 memset
    【JAVA】详解在JAVA中int与Integer的区别以及背后的原因。
  • 原文地址:https://blog.csdn.net/Im_Shuang/article/details/126504182