从if-else的参数校验中解放出来

官方文档

  • hibernate validator官方文档)提供了一套比较完善、便捷的验证实现方式。它定义了很多常用的校验注解,我们可以直接将这些注解加在我们JavaBean的属性上面,就可以在需要校验的时候进行校验了。在Spring Boot 火热的现在,该工具已经包含在spring-boot-starter-web中,不需额外引入其他包。

使用

在DTO中声明要检查的参数

  • 常见的检验注解
    • @Null:被注释的元素必须为 null
    • @NotNull:被注释的元素必须不为 null
    • @AssertTrue:被注释的元素必须为true
    • @AssertFalse:被注释的元素必须为false@Min(value):被注释的元素必须是一个数字,其值必须大于等于指定的最小值
    • @Max(value):被注释的元素必须是一个数字,其值必须小于等于指定的最大值
    • @DecimalMin(value):被注释的元素必须是一个数字,其值必须大于等于指定的最小值
    • @DecimalMax(value):被注释的元素必须是一个数字,其值必须小于等于指定的最大值
    • @Size(max=, min=):被注释的元素的大小必须在指定的范围内
    • @Digits (integer, fraction):被注释的元素必须是一个数字,其值必须在可接受的范围内
    • @Past:被注释的元素必须是一个过去的日期
    • @Future:被注释的元素必须是一个将来的日期
    • @Pattern(regex=,flag=):被注释的元素必须符合指定的正则表达式
    • @NotBlank(message =):验证字符串非null,且长度必须大于0
    • @Email:被注释的元素必须是电子邮箱地址
    • @Length(min=,max=):被注释的字符串的大小必须在指定的范围内
    • @NotEmpty:被注释的字符串的必须非空
    • @Range(min=,max=,message=):被注释的元素必须在合适的范围内

接口处声明要检查的参数

  • 需要在Controller层的入参位置用@Validated注解声明

    public HttpResult test(@Validated UserDTO userDTO)
    

Web全局异常捕获

  • @Valid在Spring boot中进行绑定参数检验时会抛出异常,需要在Spring Boot中处理

自定义注解校验

分组校验

在不同情况下需要检验的信息不同

定义分组接口

Create.java

import javax.validation.groups.Default;

public interface Create extends Default {
}

Update.java

import javax.validation.groups.Default;

public interface Update extends Default {
}

在DTO需要校验的字段添加声明

@NotNull(message = "id 不能为空", groups = Update.class)
private Long userId;

控制层入参位置进行声明

@RestController
@RequestMapping("/groups")
public class ValidatorGroupsController {

    @PostMapping("/update")
    public HttpResult updateData(@Validated(Update.class)UserDTO userDTO) {
        return HttpResult.success(userDTO);
    }
    
    @PostMapping("/create")
    public HttpResult createData(@Validated(Create.class)UserDTO userDTO) {
        return HttpResult.success(userDTO);
    }
}

@Validate和Valid的区别及使用

概述

@Valid是使用Hibernate validation的时候使用

@Validated是只用Spring Validator校验机制使用

@Validation对@Valid进行了二次封装,在使用上并没有区别,但在分组、注解位置、嵌套验证等功能上有所不同,这里主要就这几种情况进行说明。

注解位置

@Validated:用在类型、方法和方法参数上。但不能用于成员属性(field)

@Valid:可以用在方法、构造函数、方法参数和成员属性(field)上

分组校验

@Validated:提供分组功能,可以在参数验证时,根据不同的分组采用不同的验证机制

@Valid:没有分组功能

> * 不分配groups时默认每次都要验证
>
> * 对一个参数需要多种验证方式时,也可通过分配不同的组达到目的。

组序列

​ 默认情况下不同级别的约束验证是无序的,但是在一些情况下,顺序验证很重要

​ 一个组可以定义为其他组的序列,使用它进行验证的时候必须符合该序列规定的顺序。在使用组序列验证的时候,如果序列前边的组验证失败,则后面的组将不再给予验证。

嵌套校验

  • 一个待验证的pojo类,其中还包含了待验证的对象,需要在待验证对象上注解@Valid,才能验证待验证对象中的成员属性,这里不能使用@Validated。
发布了64 篇原创文章 · 获赞 76 · 访问量 9862

猜你喜欢

转载自blog.csdn.net/issunmingzhi/article/details/104791504