专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

一个简易的全局异常处理器及@RequestBody配合@Valid参数封装校验

1、封装实体类

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import javax.validation.constraints.*;
import java.util.Date;

@Getter
@Setter
@ToString
public class User {

    @NotNull(message = "字段值不能为空")
    @NotBlank(message = "这个姓名不能为空")
    private String name;

    @Max(value = 20,message = "最大长度为20")
    @Min(value = 10,message = "最小长度为10")
    private Integer age;

    @Size(max=10,min=5,message = "字段长度要在5-10之间")
    @Pattern(regexp = "^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.[a-zA-Z0-9]{2,6}$",message = "不满足邮箱正则表达式")
    private String email;

    @AssertTrue(message = "字段为true才能通过")
    private boolean isSave;
    @Future(message = "时间在当前时间之后才可以通过")
    private Date date;

}

2、在需要进行参数校验的controller实体类参数前贴上 @Valid 注解

@PostMapping(value = "/test",produces = "application/json;charset=UTF-8")
    public User vali(@RequestBody @Valid User user){
        return user;
    }

3、自定义全局异常处理器 ExceptionHandlerContrller

/**
 * 全局异常处理
 */
@ControllerAdvice
public class ExceptionHandlerContrller {

    /**
     * 当使用了 @Validated + @RequestBody 注解但是没有在绑定的数据对象后面跟上 Errors 类型的参数声明的话, 
     * Spring MVC 框架会抛出 MethodArgumentNotValidException 异常。
     * 当抛出 MethodArgumentNotValidException 异常,就会被相应的异常处理捕捉到理(有点类似于aop的意思)
     * @param e
     * @return
     */
    @ExceptionHandler(MethodArgumentNotValidException.class) //指定异常类型
    @ResponseBody
    public List<ErrorMsg> exception(MethodArgumentNotValidException e) {
        BindingResult bindingResult = e.getBindingResult();
        List<ObjectError> allErrors = bindingResult.getAllErrors();
        List<ErrorMsg> errorMsgs = new ArrayList<>();

        allErrors.forEach(objectError -> {
            ErrorMsg errorMsg = new ErrorMsg();
            FieldError fieldError = (FieldError)objectError;
            errorMsg.setField(fieldError.getField());
            errorMsg.setObjectName(fieldError.getObjectName());
            errorMsg.setMessage(fieldError.getDefaultMessage());
            errorMsgs.add(errorMsg);
        });
        return errorMsgs;
    }
}

4、当我们访问接口,结果如下

[
    {
        "field": "email",
        "objectName": "user",
        "message": "不满足邮箱正则表达式"
    },
    {
        "field": "isSave",
        "objectName": "user",
        "message": "字段为true才能通过"
    },
    {
        "field": "age",
        "objectName": "user",
        "message": "最大长度为20"
    },
    {
        "field": "name",
        "objectName": "user",
        "message": "这个姓名不能为空"
    }
]

文章永久链接:https://tech.souyunku.com/25087

未经允许不得转载:搜云库技术团队 » 一个简易的全局异常处理器及@RequestBody配合@Valid参数封装校验

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们