全局异常配置

xml:

 <!-- validation验证 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

全局异常处理类: 

@RestControllerAdvice  + @ExceptionHandler 实现异常的处理
复制代码
package com.vacc.operate.handler.exception;

import com.vacc.operate.common.ResultStatus;
import com.vacc.operate.common.result.AjaxResult;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.validator.internal.engine.ConstraintViolationImpl;
import org.springframework.http.HttpStatus;
import org.springframework.validation.BindException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import java.util.Iterator;
import java.util.Objects;

/**
 * 全局异常处理
 *
 * @author yjx
 * @version 1.0.0
 * @date 2023/2/7 17:27
 */
@Slf4j
@RestControllerAdvice
public class MyGlobalExceptionHandler {

    @ExceptionHandler(BindException.class)
    @ResponseStatus(HttpStatus.OK)
    public AjaxResult bindException(HttpServletRequest request, HttpServletResponse response, BindException exception) {
        return AjaxResult.error(ResultStatus.BAD_REQUEST.getCode(), Objects.requireNonNull(exception.getBindingResult().getFieldError()).getDefaultMessage());
    }

    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public AjaxResult methodArgumentNotValidException(HttpServletRequest request, HttpServletResponse response, MethodArgumentNotValidException exception) {
        return AjaxResult.error(Objects.requireNonNull(exception.getBindingResult().getFieldError()).getDefaultMessage());
    }

    @ExceptionHandler(MissingServletRequestParameterException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public AjaxResult methodArgumentNotValidException(HttpServletRequest request, HttpServletResponse response, MissingServletRequestParameterException exception) {
        String parameterName = exception.getParameterName();
        return AjaxResult.error(ResultStatus.BAD_REQUEST.getCode(), "请求参数 " + parameterName + " 缺失!");
    }

    @ExceptionHandler(ConstraintViolationException.class)
    @ResponseStatus(HttpStatus.OK)
    public AjaxResult methodArgumentNotValidException(HttpServletRequest request, HttpServletResponse response, ConstraintViolationException exception) {
        System.out.println(exception.getLocalizedMessage());
        Iterator<ConstraintViolation<?>> iterator = exception.getConstraintViolations().iterator();
        if (iterator.hasNext()) {
            ConstraintViolationImpl next = (ConstraintViolationImpl) iterator.next();
            return AjaxResult.error(next.getMessage());
        }
        return AjaxResult.error(exception.getMessage());
    }

    @ExceptionHandler(NullPointerException.class)
    @ResponseStatus(HttpStatus.OK)
    public AjaxResult nullPointerException(HttpServletRequest request, HttpServletResponse response, Exception exception) {
        return AjaxResult.error("系统运行存在时存在空指针异常");
    }

    @ExceptionHandler(Exception.class)
    @ResponseStatus(HttpStatus.OK)
    public AjaxResult exception(HttpServletRequest request, HttpServletResponse response, Exception exception) {
        return AjaxResult.error(exception.getMessage());
    }

}
复制代码

 

posted @   private_yang  阅读(20)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示