国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【優(yōu)雅的參數(shù)驗證@Validated】@Validated參數(shù)校驗的使用及注解詳解——你還在用if做條件驗證?

這篇具有很好參考價值的文章主要介紹了【優(yōu)雅的參數(shù)驗證@Validated】@Validated參數(shù)校驗的使用及注解詳解——你還在用if做條件驗證?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

你還在用if做條件驗證嗎?

請先看看下面代碼:(簡單舉個例子,代碼并不規(guī)范)

    @ApiOperation("新增用戶")
    @PostMapping("/addUser")
    public ResultVo insert(@ApiParam("用戶信息實體") @RequestBody User user){
        if(user.getUserName!=null){
           throw new BusinessException("用戶名稱不能為空");
        }
        if(user.getUserPhone!=null){
           throw new BusinessException("用戶電話不能為空");
        }
        if( user.getUserPhone().length()){
           throw new BusinessException("用戶電話格式不規(guī)范");
        }
        return new ResultVo(userService.insert(user));
    }

以上代碼主要是為了對用戶user實體進行條件驗證。
但是那么多的if, 寫得純純得小白一個,也使得代碼顯得臃腫不美觀不優(yōu)雅!
接下來,讓我們學習使用優(yōu)雅的參數(shù)驗證@Validated!

一、優(yōu)雅的參數(shù)驗證@Validated

@Valid和@Validated是Spring Validation框架提供的參數(shù)驗證功能。

1.@Valid和@Validated的用法(區(qū)別)

二者主要作用在于 都作為標準JSR-303規(guī)范,在檢驗Controller的入?yún)⑹欠穹弦?guī)范時,使用@Validated或者@Valid在基本驗證功能上沒有太多區(qū)別。但是在分組、注解地方、嵌套驗證等功能上兩個有所不同:

@Valid:
@Valid注解用于校驗,所屬包為:javax.validation.Valid。

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

@Validated:
@Validated是@Valid 的一次封裝,是Spring提供的校驗機制使用。

用在方法入?yún)⑸蠠o法單獨提供嵌套驗證功能。不能用在成員屬性(字段)上,也無法提示框架進行嵌套驗證。能配合嵌套驗證注解@Valid進行嵌套驗證。

2.引入并使用@Validated參數(shù)驗證

  1. 引入校驗的依賴包
        <!--第一種方式導入校驗依賴:使用springboot時,在org\springframework\spring-context\5.2.1.RELEASE\spring-context-5.2.1.RELEASE.jar-->
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--第二種方式導入校驗依賴-->
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>2.0.1.Final</version>
        </dependency>
        <!--第三種方式導入校驗依賴-->
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
        </dependency>
  1. 找到自己的實體類定義自己要校驗的參數(shù)
    @validated,Java學習知識總結,spring,java,spring boot

3.在controller的入?yún)⑻幪砑覢Validated注解(@Validated可以指定groups區(qū)別驗證,@Valid不可以指定groups,見上面二者區(qū)別)

@Validated(addGroup.class)就是給參數(shù)進行了分組校驗

    @ApiOperation("新增用戶")
    @PostMapping("/addUser")
    public ResultVo insert(@ApiParam("用戶信息實體") @Validated(addUser.class) @RequestBody User user){
        return new ResultVo(userService.insert(user));
    }

那么addGroup.class是哪里來的??什么作用?
addGroup.class:是一個接口類,簡單的來說:就是用來給參數(shù)做標記的(里面不需要寫任何代碼)
@validated,Java學習知識總結,spring,java,spring boot

到這里基本的使用就結束了!

二、javax.validation.constraints下參數(shù)條件注解詳解

實現(xiàn)參數(shù)驗證功能,我們需要@Validated注解配合 在實體類的的參數(shù)加上條件驗證注解(設置具體的條件限制規(guī)則)一起實現(xiàn)參數(shù)驗證功能。

而這些參數(shù)條件注解是由javax.validation.constraints包下提供,主要如下:

  1. @NotNull :被注解的元素必須不為null

  2. @NotBlank注解 :驗證注解的元素值不為空(不為null、去除首位空格后長度為0) ,并且類型為String。

  3. @NotEmpty注解 :驗證注解的元素值不為null且不為空(字符串長度不為0、集合大小不為0) ,并且類型為String。

  4. @AssertTrue注解 :被注解的元素必須為true,并且類型為boolean。

  5. @AssertFalse注解 :被注解的元素必須為false,并且類型為boolean。

  6. @Min注解 :被注解的元素其值必須大于等于最小值,并且類型為int,long,float,double。

  7. @Max注解:被注解的元素其值必須小于等于最小值,并且類型為int,long,float,double。

  8. @DecimalMin注解 :驗證注解的元素值大于等于@DecimalMin指定的value值,并且類型為BigDecimal。

  9. @DecimalMax注解 :驗證注解的元素值小于等于@DecimalMax指定的value值 ,并且類型為BigDecimal。

  10. @Range注解 :驗證注解的元素值在最小值和最大值之間,并且類型為BigDecimal,BigInteger,CharSequence,byte,short,int,long。

  11. @Past注解 :被注解的元素必須為過去的一個時間,并且類型為java.util.Date。

  12. @Future注解 :被注解的元素必須為未來的一個時間,并且類型為java.util.Date。

  13. @Size注解 :被注解的元素的長度必須在指定范圍內,并且類型為String,Array,List,Map。

  14. @Length注解 :驗證注解的元素值長度在min和max區(qū)間內 ,并且類型為String。

  15. @Digits注解 :驗證注解的元素值的整數(shù)位數(shù)和小數(shù)位數(shù)上限 ,并且類型為float,double,BigDecimal。

  16. @Pattern注解 :被注解的元素必須符合指定的正則表達式,并且類型為String。

  17. @Email注解: 驗證注解的元素值是Email,也可以通過regexp和flag指定自定義的email格式,類型為String。

三、自定義條件注解

如果在寫項目的過程中,參數(shù)需要的條件注解滿足不上,則我們需要自定義注解來完成

步驟:

1.創(chuàng)建一個自定義的注解類

/**自定義條件注解
 * @author: wxh
 * @version:v1.0
 * @date: 2022/11/14 22:39
 */
@Target({ElementType.FIELD,ElementType.METHOD,ElementType.ANNOTATION_TYPE,ElementType.CONSTRUCTOR,ElementType.PARAMETER,ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = {ListValueConstraintValidator.class})
public @interface ListValue {
    //配置路徑,后端傳遞信息
    String message() default "{com.itfuture.e.valid.ListValue.message}";
    
    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    //自定義一個類型來存放數(shù)據(jù)(數(shù)組)
    int[] values() default {};

}

2.創(chuàng)建一個邏輯處理數(shù)據(jù)的方法

/**自定義顯示狀態(tài)
 * @author: wxh
 * @version:v1.0
 * @date: 2022/11/14 22:49
 */
public class ListValueConstraintValidator implements ConstraintValidator<ListValue,Integer> {
    //set存儲
    private Set<Integer> set = new HashSet<>();

    //初始化數(shù)據(jù)
    //listValue拿到的是注解中的數(shù)據(jù)
    @Override
    public void initialize(ListValue constraintAnnotation) {
        //拿到注解中自定義的數(shù)據(jù),且是數(shù)組型的
        int[] values = constraintAnnotation.values();
        //放在數(shù)組里,遍歷判斷
        for(int value:values){
            set.add(value);
        }
    }

    //判斷數(shù)據(jù)是否相同
    @Override
    public boolean isValid(Integer integer, ConstraintValidatorContext constraintValidatorContext) {
        if(set.contains(integer)){
            return true;
        }
        return false;
    }
}

3.String message() default “{com.atguigu.common.valid.ListValue.message}”;

這個消息:message() default "{com.atguigu.common.valid.ListValue.message}"也可以通過配置文件去配置:
@validated,Java學習知識總結,spring,java,spring boot

4.在實體類的參數(shù)條件中來調用:

@validated,Java學習知識總結,spring,java,spring boot

至此,參數(shù)驗證基本完述!文章來源地址http://www.zghlxwxcb.cn/news/detail-784137.html

到了這里,關于【優(yōu)雅的參數(shù)驗證@Validated】@Validated參數(shù)校驗的使用及注解詳解——你還在用if做條件驗證?的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 如何優(yōu)雅的寫代碼-替代大量if else的@valid、@validated注解

    如何優(yōu)雅的寫代碼-替代大量if else的@valid、@validated注解

    @Valid 注解通常用于對象屬性字段的規(guī)則檢測,具體啥意思,下面讓我娓娓道來: 下面我們以新增一個員工為功能切入點,以常規(guī)寫法為背景,慢慢烘托出 @Valid 注解用法詳解。 那么,首先,我們會有一個員工對象 Employee,如下 :首先我們會有一個員工對象 Employee,如下 :

    2024年01月18日
    瀏覽(36)
  • SpringBoot參數(shù)校驗@Validated、@Valid

    SpringBoot參數(shù)校驗@Validated、@Valid

    在實際開發(fā)中,前端校驗并不安全,任何人都可以通過接口來調用我們的服務,就算加了一層token的校驗,有心人總會轉空子,來傳各式各樣錯誤的參數(shù),如果后端不校驗,導致數(shù)據(jù)庫數(shù)據(jù)混亂、特別是關于金額的數(shù)據(jù),可能一個接口把公司都給干倒了 0、返回類(可以不用看

    2024年01月23日
    瀏覽(22)
  • Java代碼瘦身,巧用 @Valid,@Validated 的分組校驗和嵌套檢驗,實現(xiàn)高階參數(shù)校驗操作

    Java代碼瘦身,巧用 @Valid,@Validated 的分組校驗和嵌套檢驗,實現(xiàn)高階參數(shù)校驗操作

    ? ? ? ? 在 JavaEE 項目中, RestFull 層接收參數(shù)首先要對一些字段的格式進行校驗,以防止所有查詢都落到數(shù)據(jù)庫,這也是一種合理的限流手段。以前基本上都是用 if...else...,這樣的代碼太啰嗦,除了使用策略模式進行優(yōu)化,今天介紹一下校驗注解@Valid,@Validated和@PathVariable,

    2024年02月04日
    瀏覽(23)
  • java如何優(yōu)雅的實現(xiàn)參數(shù)非空校驗,快速實現(xiàn)參數(shù)非空校驗,使用@valid實現(xiàn)參數(shù)非空校驗

    在java項目接口中,有些必傳參數(shù)需要進行非空校驗,如果參數(shù)過多,代碼會繁雜且冗余,如何優(yōu)雅的對參數(shù)進行非空校驗,下面是實現(xiàn)流程 用實體類接收參數(shù),使用非空注解編輯參數(shù)內容 使用 @Valid 注解對參數(shù)進行攔截,整體進行非空校驗 如果是SpringBoot項目,引入web開發(fā)包

    2024年02月08日
    瀏覽(25)
  • Spring MVC:常用參數(shù)(注解)的使用和參數(shù)綁定的驗證

    Spring MVC:常用參數(shù)(注解)的使用和參數(shù)綁定的驗證

    Java EE企業(yè)級應用開發(fā)教程(Spring+Spring MVC+MyBatis)(第2版) Spring MVC常用參數(shù) Spring MVC簡單應用 Spring MVC參數(shù)綁定 本實驗采用的是本地安裝的tomcat8.5.0版本 (1)創(chuàng)建maven 管理的java web工程 (2)添加本地tomcat war包 (3)實驗過程 輸出Hello Word 訪問端口:http://localhost:8080/chapter1

    2024年02月04日
    瀏覽(21)
  • 【SpringBoot】SpringBoot 優(yōu)雅地校驗參數(shù)

    【SpringBoot】SpringBoot 優(yōu)雅地校驗參數(shù)

    1、為什么要校驗參數(shù)? 在日常的開發(fā)中,為了防止非法參數(shù)對業(yè)務造成影響,需要對接口的參數(shù)進行校驗,以便正確性地入庫。 例如:登錄時,就需要判斷用戶名、密碼等信息是否為空。雖然前端也有校驗,但為了接口的安全性,后端接口還是有必要進行參數(shù)校驗的。 同時

    2024年02月05日
    瀏覽(21)
  • 如何在Spring Boot中優(yōu)雅地進行參數(shù)校驗

    在平時的開發(fā)工作中,我們通常需要對接口進行參數(shù)格式驗證。當參數(shù)個數(shù)較少(個數(shù)小于3)時,可以使用 if ... else ... 手動進行參數(shù)驗證。當參數(shù)個數(shù)大于3個時,使用 if ... else ... 進行參數(shù)驗證就會讓代碼顯得臃腫,這個時候推薦使用注解來進行參數(shù)驗證。 在Java中,注解

    2024年01月17日
    瀏覽(18)
  • Spring參數(shù)注解,支持數(shù)組入?yún)ⅲ↙ist)校驗

    2、對返回的校驗信息異常進行全局捕獲,封裝后返回。 參考 https://stackoverflow.com/questions/28150405/validation-of-a-list-of-objects-in-spring

    2024年02月11日
    瀏覽(20)
  • Springboot實現(xiàn)優(yōu)雅的參數(shù)校驗(Spring Validation)和 if else說再見

    Springboot實現(xiàn)優(yōu)雅的參數(shù)校驗(Spring Validation)和 if else說再見

    當我們想提供可靠的 API 接口,對參數(shù)的校驗,以保證最終數(shù)據(jù)入庫的正確性,是 必不可少 的活。比如下圖就是 我們一個項目里 新增一個菜單校驗 參數(shù)的函數(shù),寫了一大堆的 if else 進行校驗,非常的不優(yōu)雅,比起枯燥的CRUD來說,參數(shù)校驗更是枯燥。這只是一個創(chuàng)建菜單的

    2023年04月15日
    瀏覽(20)
  • Springboot @Validated注解詳細說明

    Springboot @Validated注解詳細說明

    在Spring Boot中,@Validated注解用于驗證請求參數(shù)。它可以應用在Controller類或方法上 1、引入依賴 2、參數(shù)說明與使用示例 注解 驗證的數(shù)據(jù)類型 描述 @NotNull 任意類型 驗證屬性不能為null @NotBlank 字符串 驗證字符串屬性不能為空且長度必須大于0 @Size(min,max ) CharSequence Collection Map

    2024年02月14日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包