单个微服务的springMVC的统一异常处理套路

package com.bjshenpu.spcloud.dajia.common.config;

import cn.hutool.core.exceptions.ValidateException;
import com.bjshenpu.common.model.dto.BaseResult;
import com.bjshenpu.common.model.dto.Result;
import com.bjshenpu.common.model.exception.BaseException;
import com.bjshenpu.common.model.exception.ServerException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindingResult;
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 javax.validation.ValidationException;
import java.util.Iterator;
import java.util.Set;

/**
 * @author zlt
 * @date 2018/12/22
 */
@Slf4j
@RestControllerAdvice
public class ExceptionAdvice {
    @ExceptionHandler({MethodArgumentNotValidException.class})
    public Result handleMAException(MethodArgumentNotValidException e) {

        String validatorMessage = "";
        BindingResult bindingResult = e.getBindingResult();
        ObjectError error;
        if (bindingResult.hasErrors()) {
            for (Iterator var5 = bindingResult.getAllErrors().iterator(); var5.hasNext(); validatorMessage = error.getDefaultMessage()) {
                error = (ObjectError) var5.next();
            }
        }
        log.warn(e.getMessage());
        return Result.failed(validatorMessage);
    }

    @ExceptionHandler({ConstraintViolationException.class})
    public Result handleCVException(ValidationException e) {
        BaseResult result = new BaseResult();
        String validatorMessage = "";
        if (e instanceof ConstraintViolationException) {
            ConstraintViolationException exs = (ConstraintViolationException) e;
            Set<ConstraintViolation<?>> constraintViolations = exs.getConstraintViolations();
            Iterator var6 = constraintViolations.iterator();
            if (var6.hasNext()) {
                ConstraintViolation<?> item = (ConstraintViolation) var6.next();
                validatorMessage = item.getMessage();
            }
        }
        return Result.failed(validatorMessage);
    }

    @ExceptionHandler({RuntimeException.class})
    public Result handleException(RuntimeException e) {
        log.error(e.getMessage(), e);
        return Result.failed("网络异常,请稍后再试!");
    }

    @ExceptionHandler({ServerException.class})
    public Result handleAeException(ServerException e) {

        return Result.failed(e.getCode(), e.getMsg());
    }
    /**
     * 处理自定义异常
     */
    @ExceptionHandler(BaseException.class)
    public Result handleRRException(BaseException e) {
        Result r = new Result();
        r.setCode(String.valueOf(e.getCode()));
        r.setMsg(e.getMessage());
        log.error(e.getMessage(), e);
        return r;
    }

    @ExceptionHandler(Exception.class)
    public Result handleException(Exception e) {
        log.error(e.getMessage(), e);
        return Result.failed("系统异常,请稍后再试");
    }

    @ExceptionHandler({ValidateException.class})
    public Result handleValidateException(ValidateException e) {

        return Result.failed(e.getMessage());
    }

}

猜你喜欢

转载自blog.csdn.net/yz18931904/article/details/130729813