亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring 使用Validation 驗(yàn)證框架的問(wèn)題詳解

 更新時(shí)間:2021年07月30日 15:34:21   作者:小畢超  
Spring Boot在內(nèi)部通過(guò)集成hibernate-validation已經(jīng)實(shí)現(xiàn)了JSR-349驗(yàn)證規(guī)范接口,在Spring Boot項(xiàng)目中只要直接使用就行了。 一般用在Controller中用于驗(yàn)證前端傳來(lái)的參數(shù)。這篇文章給大家介紹Spring Validation 驗(yàn)證框架的相關(guān)知識(shí),感興趣的朋友一起看看吧

一、介紹

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è)有所不同:

1.@Validated
分組:提供分組功能,可在入?yún)Ⅱ?yàn)證時(shí),根據(jù)不同的分組采用不同的驗(yàn)證機(jī)制。
可注解位置:可以用在類(lèi)型、方法和方法參數(shù)上。但是不能用在成員屬性上
嵌套驗(yàn)證:用在方法入?yún)⑸蠠o(wú)法單獨(dú)提供嵌套驗(yàn)證功能;不能用在成員屬性上;也無(wú)法提供框架進(jìn)行嵌套驗(yàn)證;能配合嵌套驗(yàn)證注解 @Valid 進(jìn)行嵌套驗(yàn)證。

2.@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)證。

二、使用

1. SpringBoot 2.3.0后需要添加依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

2. 配置 validation 使出現(xiàn)校驗(yàn)失敗即返回

@Configuration
public class WebConfig {
    @Bean
    public Validator validator() {
        ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class)
                .configure()
                //failFast的意思只要出現(xiàn)校驗(yàn)失敗的情況,就立即結(jié)束校驗(yàn),不再進(jìn)行后續(xù)的校驗(yàn)。
                .failFast(true)
                .buildValidatorFactory();
 
        return validatorFactory.getValidator();
    }
 
    @Bean
    public MethodValidationPostProcessor methodValidationPostProcessor() {
        MethodValidationPostProcessor methodValidationPostProcessor = new MethodValidationPostProcessor();
        methodValidationPostProcessor.setValidator(validator());
        return methodValidationPostProcessor;
    }
}

4. 編寫(xiě)全局異常捕獲,捕獲驗(yàn)證失敗,統(tǒng)一返回

@Slf4j
@ControllerAdvice
public class ValidatedExceptionHandler {

    @ResponseBody
    @ExceptionHandler(BindException.class)
    public String exceptionHandler2(BindException exception) {
        BindingResult result = exception.getBindingResult();
        if (result.hasErrors()) {
            return result.getAllErrors().get(0).getDefaultMessage();
        }
        return "參數(shù)不可為空!";
    }

    @ResponseBody
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public String exceptionHandler2(MethodArgumentNotValidException exception) {
        BindingResult result = exception.getBindingResult();
        if (result.hasErrors()) {
            return result.getAllErrors().get(0).getDefaultMessage();
        }
        return "參數(shù)不可為空!";
    }
}

5. 定義Dto,在參數(shù)上添加注解校驗(yàn)

@Data
public class ValidDto {
    @NotEmpty(message = "name 不可為空!")
    private String name;

    @NotBlank(message = "userId 不可為空!")
    private String userId;

    @Min(value = 1, message = "年齡有誤!")
    @Max(value = 120, message = "年齡有誤!")
    private int age;

    @NotBlank(message = "郵箱不可為空!")
    @Email(message = "郵箱有誤!")
    private String email;

    @NotBlank(message = "mobile不可為空!")
    @Pattern(regexp = "^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\\d{8}$", message = "手機(jī)號(hào)碼有誤!")
    private String mobile;

    @NotNull(message = "validVo 不可為空!")
    @Valid
    private ValidVo validVo;

    @NotEmpty(message = "list1 不可為空!")
    @Size(min = 1, max = 2, message = "list1 數(shù)據(jù)過(guò)大")
    @Valid
    private List<ValidVo> list1;
}
@Data
public class ValidVo {
    @NotBlank(message = "gender is null")
    private String gender;
    @NotBlank(message = "test is null")
    private String test;
}

6. Controller

@RestController
@RequestMapping("/valid")
@CrossOrigin
public class ValidController {

    @GetMapping("/GetTest")
    public String getTest(@Valid ValidDto dto, BindingResult result) {
        if (result.hasErrors()) {
            return result.getAllErrors().get(0).getDefaultMessage();
        }
        return "success";
    }

    @GetMapping("/GetTest2")
    public String getTest2(@Validated ValidDto dto) {

        return "success";
    }

    @GetMapping("/GetTest3")
    public String getTest3(@Validated @RequestBody ValidDto dto) {

        return "success";
    }
}

到此這篇關(guān)于Spring 使用Validation 驗(yàn)證框架的問(wèn)題詳解的文章就介紹到這了,更多相關(guān)Spring Validation 驗(yàn)證框架內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java_Spring之基于注解的 AOP 配置

    Java_Spring之基于注解的 AOP 配置

    這篇文章主要介紹了Java_Spring中基于注解的AOP配置,我們要先進(jìn)行環(huán)境的搭建,在進(jìn)行注解配置,感興趣的同學(xué)可以參考閱讀
    2023-04-04
  • Java 讀寫(xiě)Properties配置文件詳解

    Java 讀寫(xiě)Properties配置文件詳解

    這篇文章主要介紹了Java 讀寫(xiě)Properties配置文件詳解的相關(guān)資料,這里舉例說(shuō)明該如何實(shí)現(xiàn),具有參考價(jià)值,需要的朋友可以參考下
    2016-11-11
  • Mybatis中使用萬(wàn)能的Map傳參實(shí)現(xiàn)

    Mybatis中使用萬(wàn)能的Map傳參實(shí)現(xiàn)

    在編程中,有可能遇到我們的實(shí)體類(lèi)或者數(shù)據(jù)庫(kù)中表的字段或參數(shù)過(guò)多的情況,那這時(shí)候用Map傳參是比較理想的選擇,本文就詳細(xì)的介紹一下如何使用,感興趣的可以了解下
    2021-07-07
  • Spring?Security認(rèn)證的完整流程記錄

    Spring?Security認(rèn)證的完整流程記錄

    相信大伙對(duì)Spring Security這個(gè)框架又愛(ài)又恨,愛(ài)它的強(qiáng)大,恨它的繁瑣,下面這篇文章主要給大家介紹了關(guān)于Spring?Security認(rèn)證流程的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • 解決mybatis-plus自定義xml的坑

    解決mybatis-plus自定義xml的坑

    這篇文章主要介紹了解決mybatis-plus自定義xml的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • SpringMVC整合websocket實(shí)現(xiàn)消息推送及觸發(fā)功能

    SpringMVC整合websocket實(shí)現(xiàn)消息推送及觸發(fā)功能

    這篇文章主要為大家詳細(xì)介紹了SpringMVC整合websocket實(shí)現(xiàn)消息推送及觸發(fā)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Log4j 配置日志打印時(shí)區(qū)的實(shí)現(xiàn)方法

    Log4j 配置日志打印時(shí)區(qū)的實(shí)現(xiàn)方法

    下面小編就為大家分享一篇Log4j 配置日志打印時(shí)區(qū)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • 關(guān)于SpingMVC的<context:component-scan>包掃描踩坑記錄

    關(guān)于SpingMVC的<context:component-scan>包掃描踩坑記錄

    這篇文章主要介紹了關(guān)于SpingMVC的<context:component-scan>包掃描踩坑記錄,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • springboot簡(jiǎn)單實(shí)現(xiàn)單點(diǎn)登錄的示例代碼

    springboot簡(jiǎn)單實(shí)現(xiàn)單點(diǎn)登錄的示例代碼

    本文主要介紹了springboot簡(jiǎn)單實(shí)現(xiàn)單點(diǎn)登錄的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 利用Spring IOC技術(shù)實(shí)現(xiàn)用戶登錄驗(yàn)證機(jī)制

    利用Spring IOC技術(shù)實(shí)現(xiàn)用戶登錄驗(yàn)證機(jī)制

    這篇文章主要為大家詳細(xì)介紹了Spring IOC技術(shù)實(shí)現(xiàn)用戶登錄驗(yàn)證機(jī)制的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10

最新評(píng)論