• 全局异常捕获工具类


    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"));
        }
    
    }
    
  • 相关阅读:
    四旋翼飞行器控制和路径规划附Matlab代码
    【网络安全---XSS漏洞(1)】XSS漏洞原理,产生原因,以及XSS漏洞的分类。附带案例和payload让你快速学习XSS漏洞
    MySQL增删查改(进阶2)
    docker容器里面的java进程内存泄露排查
    面试常问:HTTPS与HTTP的区别
    C++ Reference: Standard C++ Library reference: Containers: deque: deque: clear
    ARM_LIB_HEAP 与 RTT_HEAP的区别
    【JVM】10 道不得不会的 JVM 面试题
    SDS-PAGE蛋白分子分析(考染)
    [附源码]java毕业设计基于个性化的汽车购买推荐系统
  • 原文地址:https://blog.csdn.net/Im_Shuang/article/details/126504182