最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot?中使用?Validation?校驗參數的方法詳解

 更新時間:2022年05月23日 11:00:28   作者:工作事小摸魚事大  
Validation?是用于檢查程序代碼中參數的有效性的框架,作為?Spring?框架中的一個參數校驗工具,集成在?spring-context?包中,這篇文章主要介紹了SpringBoot?中使用?Validation?校驗參數,需要的朋友可以參考下

項目中寫邏輯時,為保證程序的健壯性,需要對各種參數進行判斷,這就導致業(yè)務代碼不只健壯,還十分臃腫。其實 SpringBoot 中已經提供了 Validation 參數驗證框架,可以方便的對參數進行合法性校驗。

1. Validation 介紹

Validation 是用于檢查程序代碼中參數的有效性的框架,作為 Spring 框架中的一個參數校驗工具,集成在 spring-context 包中。

1.1 Validation 注解

Validation 包含了眾多的注解來幫助對Java程序不同類型的參數進行校驗,校驗相關注解分布在spring-boot-starter-validation 依賴的 javax.validation.constraints 包中。

  • @Null/@NotnULL,標注的字段必須為null/必須不為null
  • @AssertFalse/@AssertTrue,標注字段可以為null,但不為null時必須為false/true
  • @Email,標注的字段對應值必須為email格式
  • @URL,標注的字段值必須是URL
  • @Patten,標注的字段值必須符合定義的正則表達式

其他類似注解的使用可以查看javax.validation.constraints 包中定義注解信息。

1.2 @valid 和 @validated的區(qū)別

在實際使用 Validation 框架時,經常會對 @valid 和 @validated 注解的使用產生誤解,在這里對比一下兩個注解的異同。

  • 當使用僅是注解字段屬性并驗證規(guī)范,@Validated 和 @Valid 注解的功能是相同的。
  • Spring Validation 驗證框架提供了 @Validated 注解對參數進行驗證,符合Spring’s JSR-303規(guī)范;而 @Valid 注解是 javax 提供的,符合標準的JSR-303規(guī)范。

在注解的使用上,@Validated 注解可以用于類型、方法和參數上;而 @Valid 還可以用于屬性之上。

//@Validated定義
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Validated {
    Class<?>[] value() default {};
}
//@Valid定義
@Target({ METHOD, FIELD, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
public @interface Valid {
}
  • @Validated 注解可以使用分組校驗的功能,為同一個對象屬性提供不同分組,并根據分組來校驗屬性參數;而 @Valid 注解不支持分組驗證。
  • @Valid 注解支持嵌套驗證,當類的屬性是一個復雜對象時,可以使用 @Valid 對該屬性對象中的屬性同時進行校驗;@Validated 并不支持在屬性上使用。

2. SpringBoot 中使用 Validator 校驗參數

2.1 依賴引入

SpringBoot 中使用 Validator 無需單獨引入,因為在 web 依賴包中已經存在,直接使用即可。

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

如果 SpringBoot 版本比較新,在 web 包中可能已不再包含 Validation 框架,本地使用SpringBoot 2.6.3 版本 web 依賴包已經不再包含。

或者

SpringBoot新版本雖然不在web包中包含,但也提供了start啟動依賴提供相關功能,單獨引入 Jar 包可以使用如下坐標信息:

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

另外,引入依賴時還可以引入 hibernate 提供的 validator框架包,不過使用時需要表明版本號信息。

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.1.5.Final</version>
</dependency>

2.2 標注校驗實體類

后端接收請求參數時,通常是使用 JavaBean 對象來接收參數信息,如果想要對實體類中的屬性進行校驗,則需要對屬性使用校驗相關的注解標注,并且實體對象必須定義 getter/setter方法,可以使用 lombok 的 @Data。

@Data
public class Customer{
    private Long id;
    @NotNull
    private String countryName;
    @NotNull
    private String countryCode;
    @Email
    private String email;
    @Valid
    private Customer parentCustomerInfo;
}

2.3 開啟參數校驗

2.3.1 簡單參數校驗

服務接口接收單個簡單參數時,可以在方法參數中直接使用校驗注解。

@PostMapping("/get")
public ResultMap getCustomerInfo(@RequestParam("customerCode") @NotNull(message = "用戶編碼不可以為空!") String customerCode){
    return ResultMapUtils().ok();
}

單參數校驗時,還需要在 controller 層控制器類中使用 @Validated 標注才會生效。

2.3.2 JavaBean 校驗

在實體類中使用校驗注解標注需要校驗的字段后,還需要在請求層接收參數時開啟參數校驗,只需要在 controller 接口層的參數中使用 @Validated 標注,在接口接收到請求參數時會自動進行校驗。

@Autowired
private CustomerService customerService;
@PostMapping("/execute")
public ResultMap execute(@RequestBody @Validated GeneralDataRequest<CustomerRequest> generalDataRequest){
    CustomerRequest request = generalDataRequest.getData();
    return customerService.execute(request);
}

2.4 捕捉參數校驗異常

使用 Validation 校驗異常后,當參數發(fā)生異常時,會拋出 MethodArgumentNotValidException 類型的異常,為了程序報錯更通俗易懂,可以定義全局異常來捕獲該類型的異常,并統(tǒng)一返回結果信息。

@SLF4j
@ControllerAdvice
public class ExceptionConfig {
    /**
     * 參數校驗異常
     */
    @ResponseBody
    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    public ResultMap argumentExceptionHandler(MethodArgumentNotValidException exception) {
        String message = exception.getBindingResult().getFieldError().getDefaultMessage();
        log.info("發(fā)生參數異常:{}", message);
        return ResultMapUtils.resultError(ErrorCodeConstant.System.E100003, null, message);
    }
}

到此這篇關于SpringBoot 中使用 Validation 校驗參數的文章就介紹到這了,更多相關SpringBoot Validation 校驗參數內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java String、StringBuffer與StringBuilder的區(qū)別

    Java String、StringBuffer與StringBuilder的區(qū)別

    本文主要介紹Java String、StringBuffer與StringBuilder的區(qū)別的資料,這里整理了相關資料及詳細說明其作用和利弊點,有需要的小伙伴可以參考下
    2016-09-09
  • SpringBoot導出Excel表格到指定路徑的代碼詳解

    SpringBoot導出Excel表格到指定路徑的代碼詳解

    Spring Boot導出Excel通常涉及到使用第三方庫如Apache POI或者XlsxWriter等,它們能幫助你在Spring應用中生成并下載Excel文件,那么SpringBoot如何導出Excel表格到指定路徑,本文將給大家詳細的介紹一下
    2024-07-07
  • springboot中請求地址轉發(fā)的兩種方案

    springboot中請求地址轉發(fā)的兩種方案

    在開發(fā)過程中,我們經常需要將請求從一個服務轉發(fā)到另一個服務,以實現(xiàn)不同服務之間的協(xié)作,本文主要介紹了springboot中請求地址轉發(fā)的兩種方案,感興趣的可以了解一下
    2023-11-11
  • 使用@Valid+BindingResult進行controller參數校驗方式

    使用@Valid+BindingResult進行controller參數校驗方式

    這篇文章主要介紹了使用@Valid+BindingResult進行controller參數校驗方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java 二進制數據與16進制字符串相互轉化方法

    java 二進制數據與16進制字符串相互轉化方法

    今天小編就為大家分享一篇java 二進制數據與16進制字符串相互轉化方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Mybatis學習總結之mybatis使用建議

    Mybatis學習總結之mybatis使用建議

    這篇文章主要介紹了Mybatis學習總結之mybatis使用建議的相關資料,非常具有參考借鑒價值,需要的朋友可以參考下
    2016-05-05
  • Java循環(huán)創(chuàng)建對象內存溢出的解決方法

    Java循環(huán)創(chuàng)建對象內存溢出的解決方法

    在Java中,如果在循環(huán)中不當地創(chuàng)建大量對象而不及時釋放內存,很容易導致內存溢出(OutOfMemoryError),所以本文給大家介紹了Java循環(huán)創(chuàng)建對象內存溢出的解決方法,需要的朋友可以參考下
    2025-01-01
  • java  Vector和ArrayList的分析及比較

    java Vector和ArrayList的分析及比較

    這篇文章主要介紹了java Vector和ArrayList的分析及比較的相關資料,Vector是多線程安全的,而ArrayList不是,本文主要做對比對這兩個方法,需要的朋友可以參考下
    2016-11-11
  • Java中的JPA實體關系:JPA一對一,一對多(多對一),多對多

    Java中的JPA實體關系:JPA一對一,一對多(多對一),多對多

    Java Persistence API(JPA)是Java平臺上的一個對象關系映射(ORM)規(guī)范,用于簡化數據庫操作,其中實體關系的映射是核心內容之一,本文將深入淺出地探討JPA中的三種基本實體關系類型:一對一、一對多、多對多,揭示常見問題、易錯點及其避免策略,希望能幫助大家
    2024-06-06
  • Java讀寫鎖ReadWriteLock原理與應用場景詳解

    Java讀寫鎖ReadWriteLock原理與應用場景詳解

    這篇文章主要介紹了Java讀寫鎖ReadWriteLock原理與應用場景詳解,讀寫狀態(tài)的設計,寫鎖的獲取與釋放,鎖降級需要的朋友可以參考下
    2023-02-02

最新評論

平乡县| 平阴县| 古田县| 开原市| 瑞安市| 禹州市| 鹤壁市| 鄂托克旗| 张家港市| 留坝县| 韩城市| 德州市| 绍兴市| 新源县| 留坝县| 明光市| 汉沽区| 永靖县| 惠来县| 固安县| 镇巴县| 常州市| 永善县| 邯郸县| 平顶山市| 广宗县| 东至县| 时尚| 铁岭县| 剑阁县| 德令哈市| 抚松县| 郧西县| 保山市| 大城县| 青阳县| 东海县| 武隆县| 安岳县| 无极县| 沙河市|