[SpringBoot] @RestControllerAdvice manejo personalizado de excepciones en el proyecto

necesidad

En la actualidad, el marco de trabajo de la empresa encapsula el manejo de excepciones, pero cuando se usa la anotación @Validated para evaluar los campos, la excepción devuelta es un montón de pilas de excepciones, por lo que es necesario personalizar la excepción lanzada por @Validated nuevamente. MethodArgumentNotValidException Interceptar, procesar y desechar.

lograr

La interceptación de excepciones personalizadas
ApiResult está encapsulada por el propio marco de la empresa, por lo que debe integrarse en el mismo.

import org.springframework.core.annotation.Order;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * @author cf
 * @date 2023/4/12上午 11:31
 */
@Order(999999)
@RestControllerAdvice
public class ConfigExceptionHandler {
    
    

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ApiResult<?> handlerException(MethodArgumentNotValidException e) {
    
    
        MethodArgumentNotValidExceptionAction methodArgumentNotValidExceptionAction = new MethodArgumentNotValidExceptionAction(e.getParameter(),e.getBindingResult());
        return ApiResult.error(methodArgumentNotValidExceptionAction.getMessage());
    }
}

重写MethodArgumentNotValidExceptionAcción

import org.springframework.core.MethodParameter;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;

import java.util.Iterator;

/**
 * @author cf
 * @description: 针对Validated 异常抛出处理
 * @date 2023/4/12下午 2:05
 */
public class MethodArgumentNotValidExceptionAction extends Exception {
    
    
    private final MethodParameter parameter;
    private final BindingResult bindingResult;

    public MethodArgumentNotValidExceptionAction(MethodParameter parameter, BindingResult bindingResult) {
    
    
        this.parameter = parameter;
        this.bindingResult = bindingResult;
    }

    public MethodParameter getParameter() {
    
    
        return this.parameter;
    }

    public BindingResult getBindingResult() {
    
    
        return this.bindingResult;
    }

    //这里对异常进行了封装
    public String getMessage() {
    
    
        Iterator var2 = this.bindingResult.getAllErrors().iterator();
        StringBuilder sb = new StringBuilder();
        while (var2.hasNext()) {
    
    
            ObjectError error = (ObjectError) var2.next();
            sb.append("[").append(error.getDefaultMessage()).append("] ");
        }
        return sb.toString();
    }
}

punto importante

Es mejor agregar el escaneo de este directorio al escanear. Dentro de @ComponentScan

Efecto

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/daohangtaiqian/article/details/130107796
Recomendado
Clasificación