1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        SpringBoot 參數(shù)驗(yàn)證之 @Validated 和 @Valid

        共 6358字,需瀏覽 13分鐘

         ·

        2021-05-11 20:03

        0x01:Spring Validation 驗(yàn)證框架

        Spring Validation 驗(yàn)證框架對(duì)參數(shù)的驗(yàn)證機(jī)制提供了@Validated (Spring's JSR-303 規(guī)范,是標(biāo)準(zhǔn) JSR-303 的一個(gè)變種),javax 提供了@Valid(標(biāo)準(zhǔn) JSR-303 規(guī)范),配合 BindingResult 可以直接提供參數(shù)驗(yàn)證結(jié)果。其中對(duì)于字段的特定驗(yàn)證注解,比如 @NotNull。

        兩者在檢驗(yàn) Controller 的入?yún)⑹欠穹弦?guī)范時(shí),使用@Validated 或者 @Valid 在基本驗(yàn)證功能上沒(méi)有太多區(qū)別。但是在分組、注解地方、嵌套驗(yàn)證等功能上兩個(gè)有所不同:

         @Validated

        • 分組提供分組功能,可在入?yún)Ⅱ?yàn)證時(shí),根據(jù)不同的分組采用不同的驗(yàn)證機(jī)制。

        • 可注解位置 :可以用在類型、方法和方法參數(shù)上。但是不能用在成員屬性上 

        • 嵌套驗(yàn)證:用在方法入?yún)⑸蠠o(wú)法單獨(dú)提供嵌套驗(yàn)證功能;不能用在成員屬性上;也無(wú)法提供框架進(jìn)行嵌套驗(yàn)證;能配合嵌套驗(yàn)證注解 @Valid 進(jìn)行嵌套驗(yàn)證。

        @Valid

        • 分組:無(wú)分組功能

        • 可注解位置:可以用在方法、構(gòu)造函數(shù)、方法參數(shù)和成員屬性上(兩者是否能用于成員屬性上直接影響能否提供嵌套驗(yàn)證的功能)

        • 嵌套驗(yàn)證用在方法入?yún)⑸蠠o(wú)法單獨(dú)提供嵌套驗(yàn)證功能;能夠用在成員屬性上,提示驗(yàn)證框架進(jìn)行嵌套驗(yàn)證;能配合嵌套驗(yàn)證注解@Valid進(jìn)行嵌套驗(yàn)證。


        0x02:簡(jiǎn)單集成

        • pom.xml 文件添加如下依賴

        <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>
        • 創(chuàng)建 Cotroller

        @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;
            }

        }

        主要在參數(shù)中添加 @Validated 注解,然后使用的 JSON 格式數(shù)據(jù)提交

        • 創(chuàng)建參數(shù) Vo 類

        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,標(biāo)識(shí)不能為空

        • 創(chuàng)建啟動(dòng)引導(dǎo)類

        @SpringBootApplication
        public class Application 
        {
            public static void main( String[] args )
            
        {
                SpringApplication.run(Application.class, args);
            }
        }
        • 測(cè)試驗(yàn)證

        請(qǐng)求參數(shù)

        如果為空,則驗(yàn)證不過(guò);如果不為空,則驗(yàn)證通過(guò)


        0x03:分組驗(yàn)證

        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;
            }

        關(guān)鍵代碼 

        • @Validated(value={UserDto.Add.class}) 

        • @Validated(value={UserDto.Update.class})

        進(jìn)行了分組校驗(yàn)

        • UserDto 對(duì)象代碼

        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
        }
        • 測(cè)試驗(yàn)證

        添加用戶

        更新用戶

        如有id參數(shù)

        中獎(jiǎng)名單

        喜歡,在看


        瀏覽 57
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            污视频免费网站 | 青青草原成人网站 | 亚洲免费观看高清 | 在线播放国产精品偷拍- | 成人影视久久久无码三区 | 老女人操逼网 | 99久久久无码国产精品性九价 | 全部在线A片免费播放 | 青青草.com | 国产精品久久久久9999 |