SpringBoot 參數驗證之 -Validated 和 -Vali

0x01:Spring Validation 驗證框架

Spring Validation 驗證框架對參數的驗證機制提供了 @Validated (Spring's JSR-303 規範,是標準 JSR-303 的一個變種),javax 提供了 @Valid(標準 JSR-303 規範),配合 BindingResult 可以直接提供參數驗證結果。其中對於字段的特定驗證註解,比如 @NotNull。

兩者在檢驗 Controller 的入參是否符合規範時,使用 @Validated 或者 @Valid 在基本驗證功能上沒有太多區別。但是在分組、註解地方、嵌套驗證等功能上兩個有所不同:

 @Validated

@Valid

0x02:簡單集成

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.olive</groupId>
    <artifactId>valid-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.8.RELEASE</version>
        <relativePath /> 
    </parent>
    <name>valid-demo</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>
@RestController
public class UserController {

    @RequestMapping("/user/queryUser")
    public Map queryUser(@RequestBody @Validated UserQueryVo queryVo){
        Map result = new HashMap();
        result.put("code", 200);
        result.put("msg""success");
        return result;
    }

}

主要在參數中添加 @Validated 註解,然後使用的 JSON 格式數據提交

BaseVo.java

public class BaseVo implements Serializable{

}

UserQueryVo.java

public class UserQueryVo extends BaseVo {

    @NotEmpty(message="不能爲空")
    private String query;

    public String getQuery() {
        return query;
    }

    public void setQuery(String query) {
        this.query = query;
    }


}

主要在查詢條件字段添加註解 @NotEmpty,標識不能爲空

@SpringBootApplication
public class Application 
{
    public static void main( String[] args )
    {
        SpringApplication.run(Application.class, args);
    }
}

請求參數

如果爲空,則驗證不過;如果不爲空,則驗證通過

0x03:分組驗證

controller 增加添加用戶和修改用戶接口

@RequestMapping("/user/addUser")
    public Map addUser(@RequestBody @Validated(value={UserDto.Add.class}) UserDto userDto){
        Map result = new HashMap();
        result.put("code", 200);
        result.put("msg""success");
        return result;
    }

    @RequestMapping("/user/editUser")
    public Map editUser(@RequestBody @Validated(value={UserDto.Update.class}) UserDto userDto){
        Map result = new HashMap();
        result.put("code", 200);
        result.put("msg""success");
        return result;
    }

關鍵代碼 

進行了分組校驗

package com.olive.vo;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;

public class UserDto extends BaseVo{

    @NotNull(groups=Update.class, message="不能爲空")
    @Null(groups=Add.class)
    private Integer id;

    private String userName;

    // 省略 getter  setter
}

添加用戶

更新用戶

如有 id 參數

中獎名單

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/yAovWmsFB7AWIbR8DzNtfA