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

接收來自客戶端的參數(shù)使用【JSR303校驗(yàn)框架】進(jìn)行校驗(yàn)參數(shù)是否合法

這篇具有很好參考價(jià)值的文章主要介紹了接收來自客戶端的參數(shù)使用【JSR303校驗(yàn)框架】進(jìn)行校驗(yàn)參數(shù)是否合法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

1:JSR303校驗(yàn)

1.1:統(tǒng)一校驗(yàn)的需求

1.2:統(tǒng)一校驗(yàn)實(shí)現(xiàn)

1.3:分組校驗(yàn)

1.4:校驗(yàn)規(guī)則不滿足?


1:JSR303校驗(yàn)

1.1:統(tǒng)一校驗(yàn)的需求

前端請求后端接口傳輸參數(shù),是在controller中校驗(yàn)還是在Service中校驗(yàn)?

答案是都需要校驗(yàn),只是分工不同。

Contoller中校驗(yàn)請求參數(shù)的合法性,包括:必填項(xiàng)校驗(yàn),數(shù)據(jù)格式校驗(yàn),比如:是否是符合一定的日期格式,等。

Service中要校驗(yàn)的是業(yè)務(wù)規(guī)則相關(guān)的內(nèi)容,比如:課程已經(jīng)審核通過所以提交失敗。

Service中根據(jù)業(yè)務(wù)規(guī)則去校驗(yàn)不方便寫成通用代碼,Controller中則可以將校驗(yàn)的代碼寫成通用代碼。

早在JavaEE6規(guī)范中就定義了參數(shù)校驗(yàn)的規(guī)范,它就是JSR-303,它定義了Bean Validation,即對bean屬性進(jìn)行校驗(yàn)。

SpringBoot提供了JSR-303的支持,它就是spring-boot-starter-validation,它的底層使用Hibernate Validator,Hibernate Validator是Bean Validation 的參考實(shí)現(xiàn)。

所以,我們準(zhǔn)備在Controller層使用spring-boot-starter-validation完成對請求參數(shù)的基本合法性進(jìn)行校驗(yàn)。

1.2:統(tǒng)一校驗(yàn)實(shí)現(xiàn)

首先添加依賴

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

在javax.validation.constraints包下有很多這樣的校驗(yàn)注解,直接使用注解定義校驗(yàn)規(guī)則即可。

接收來自客戶端的參數(shù)使用【JSR303校驗(yàn)框架】進(jìn)行校驗(yàn)參數(shù)是否合法

規(guī)則如下:接收來自客戶端的參數(shù)使用【JSR303校驗(yàn)框架】進(jìn)行校驗(yàn)參數(shù)是否合法

示例:一個(gè)接口的參數(shù)校驗(yàn)

接收來自客戶端的參數(shù)使用【JSR303校驗(yàn)框架】進(jìn)行校驗(yàn)參數(shù)是否合法

@Data
@ApiModel(value="AddCourseDto", description="新增課程基本信息")
public class AddCourseDto {

 @NotEmpty(message = "課程名稱不能為空")
 @ApiModelProperty(value = "課程名稱", required = true)
 private String name;

 @NotEmpty(message = "適用人群不能為空")
 @Size(message = "適用人群內(nèi)容過少",min = 10)
 @ApiModelProperty(value = "適用人群", required = true)
 private String users;

 @ApiModelProperty(value = "課程標(biāo)簽")
 private String tags;

 @NotEmpty(message = "課程分類不能為空")
 @ApiModelProperty(value = "大分類", required = true)
 private String mt;

 @NotEmpty(message = "課程分類不能為空")
 @ApiModelProperty(value = "小分類", required = true)
 private String st;

 @NotEmpty(message = "課程等級不能為空")
 @ApiModelProperty(value = "課程等級", required = true)
 private String grade;

 @ApiModelProperty(value = "教學(xué)模式(普通,錄播,直播等)", required = true)
 private String teachmode;

 @ApiModelProperty(value = "課程介紹")
 private String description;

 @ApiModelProperty(value = "課程圖片", required = true)
 private String pic;

 @NotEmpty(message = "收費(fèi)規(guī)則不能為空")
 @ApiModelProperty(value = "收費(fèi)規(guī)則,對應(yīng)數(shù)據(jù)字典", required = true)
 private String charge;

 @ApiModelProperty(value = "價(jià)格")
 private Float price;
 @ApiModelProperty(value = "原價(jià)")
 private Float originalPrice;


 @ApiModelProperty(value = "qq")
 private String qq;

 @ApiModelProperty(value = "微信")
 private String wechat;
 @ApiModelProperty(value = "電話")
 private String phone;

 @ApiModelProperty(value = "有效期")
 private Integer validDays;
}

?上邊用到了@NotEmpty和@Size兩個(gè)注解,@NotEmpty表示屬性不能為空,@Size表示限制屬性內(nèi)容的長短。

?定義好校驗(yàn)規(guī)則還需要開啟校驗(yàn),在controller方法中添加@Validated注解,如下

接收來自客戶端的參數(shù)使用【JSR303校驗(yàn)框架】進(jìn)行校驗(yàn)參數(shù)是否合法

如果校驗(yàn)出錯Spring會拋出MethodArgumentNotValidException異常,我們需要在統(tǒng)一異常處理器中捕獲異常,解析出異常信息。

    @ResponseBody
    //處理器捕獲入口參數(shù)報(bào)的錯誤進(jìn)入該方法內(nèi)進(jìn)行處理
    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public RestErrorResponse methodArgumentNotValidException(MethodArgumentNotValidException e){
       //創(chuàng)建一個(gè)集合進(jìn)行接收不合法信息
        List<String> msgList = new ArrayList<>();
        BindingResult bindingResult = e.getBindingResult();
        //入口參數(shù)校驗(yàn),可能有多個(gè)參數(shù)信息都不合法,存放
        bindingResult.getFieldErrors().stream().forEach(fieldError -> msgList.add(fieldError.getDefaultMessage()));
      
        //處理集合內(nèi)的不合法提示,為字符串
        String msg = StringUtils.join(msgList, ",");
        //記錄異常
        log.error("系統(tǒng)異常{}",msg);
        //解析出異常信息
        RestErrorResponse restErrorResponse = new RestErrorResponse(msg);

        return restErrorResponse;
    }

使用httpclient進(jìn)行測試一下

?接收來自客戶端的參數(shù)使用【JSR303校驗(yàn)框架】進(jìn)行校驗(yàn)參數(shù)是否合法

可以看到校驗(yàn)器生效。?

1.3:分組校驗(yàn)

有時(shí)候在同一個(gè)屬性上設(shè)置一個(gè)校驗(yàn)規(guī)則不能滿足要求,比如:訂單編號由系統(tǒng)生成,在添加訂單時(shí)要求訂單編號為空,在更新 訂單時(shí)要求訂單編寫不能為空。此時(shí)就用到了分組校驗(yàn),同一個(gè)屬性定義多個(gè)校驗(yàn)規(guī)則屬于不同的分組,比如:添加訂單定義@NULL規(guī)則屬于insert分組,更新訂單定義@NotEmpty規(guī)則屬于update分組,insert和update是分組的名稱,是可以修改的。

下邊舉例說明

我們用class類型來表示不同的分組,所以我們定義不同的接口類型(空接口)表示不同的分組,由于校驗(yàn)分組是公用的,所以定義在 公共調(diào)用的工程中。如下:

/**
 * 定義一個(gè)校驗(yàn)分組
 */
public class ValidationGroups {

 public interface Inster{};
 public interface Update{};
 public interface Delete{};

}

在接收參數(shù)的模型類中進(jìn)行填寫分組

接收來自客戶端的參數(shù)使用【JSR303校驗(yàn)框架】進(jìn)行校驗(yàn)參數(shù)是否合法?在Controller方法中啟動校驗(yàn)規(guī)則指定要使用的分組名:

接收來自客戶端的參數(shù)使用【JSR303校驗(yàn)框架】進(jìn)行校驗(yàn)參數(shù)是否合法

?再次測試,由于這里指定了update分組,所以拋出 異常信息:添加課程名稱不能為空。

如果修改分組為ValidationGroups.Inster.class,異常信息為:修改課程名稱不能為空。

?接收來自客戶端的參數(shù)使用【JSR303校驗(yàn)框架】進(jìn)行校驗(yàn)參數(shù)是否合法

1.4:校驗(yàn)規(guī)則不滿足?

如果javax.validation.constraints包下的校驗(yàn)規(guī)則滿足不了需求怎么辦?

1、手寫校驗(yàn)代碼 。

2、自定義校驗(yàn)規(guī)則注解。

如何自定義校驗(yàn)規(guī)則注解,請自行查閱資料實(shí)現(xiàn)。文章來源地址http://www.zghlxwxcb.cn/news/detail-426786.html

到了這里,關(guān)于接收來自客戶端的參數(shù)使用【JSR303校驗(yàn)框架】進(jìn)行校驗(yàn)參數(shù)是否合法的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【SpringMVC】JSR 303與攔截器注釋使用

    【SpringMVC】JSR 303與攔截器注釋使用

    目錄 一、JSR 303 1.1 JSR 303介紹 1.2 為什么要使用JSR-303 1.3?常用注解 1.4 使用示例 1.4.1 導(dǎo)入JSR303依賴 1.4.2?配置校驗(yàn)規(guī)則 1.4.3 編寫方法校驗(yàn) ?1.4.4 編寫前端 1.4.5 測試 ?編輯? 1.5 @Validated與@Valid區(qū)別 ? 二、攔截器(interceptor) ?2.1 什么是攔截器 ? 2.2?攔截器與過濾器的區(qū)別 ?

    2024年02月07日
    瀏覽(18)
  • 【SpringMVC】JSR 303與攔截器注解使用

    ? ?JSR 303,它是Java EE(現(xiàn)在稱為Jakarta EE)規(guī)范中的一部分。JSR 303定義了一種用于驗(yàn)證Java對象的標(biāo)準(zhǔn)規(guī)范,也稱為Bean驗(yàn)證。 ? ? ? ? Bean驗(yàn)證是一種用于驗(yàn)證對象屬性的框架,它可以確保對象符合特定的規(guī)則和約束。這些規(guī)則可以包括字段的非空性、長度限制、格式驗(yàn)證等。

    2024年02月07日
    瀏覽(34)
  • SpringMVC中的JSR303與攔截器的使用

    SpringMVC中的JSR303與攔截器的使用

    ? ? ?JSR303是Java中的一個(gè)標(biāo)準(zhǔn),用于 驗(yàn)證和校驗(yàn)JavaBean對象的屬性的合法性 。它提供了一組用于定義驗(yàn)證規(guī)則的注解,如@NotNull、@Min、@Max等。在Spring MVC中,可以使用JSR303注解對請求參數(shù)進(jìn)行校驗(yàn)。 前端不是已經(jīng)校驗(yàn)過數(shù)據(jù)了嗎?為什么我們還要做校驗(yàn)?zāi)?,直接用不就好了?/p>

    2024年02月07日
    瀏覽(22)
  • Spring-MVC使用JSR303及攔截器,增強(qiáng)網(wǎng)絡(luò)隱私安全

    Spring-MVC使用JSR303及攔截器,增強(qiáng)網(wǎng)絡(luò)隱私安全

    目錄 一、JSR303 ( 1 )? 是什么 ( 2 )? 作用 ( 3 )??常用注解 ( 4 )? 入門使用 二、攔截器 2.1? 是什么 2.2? 攔截器與過濾器的區(qū)別 2.3? 應(yīng)用場景 2.4 基礎(chǔ)使用 2.5?用戶登錄權(quán)限控制 給我們帶來的收獲 JSR 303是Java規(guī)范請求(Java Specification Request)的一部分, 它定義了一套標(biāo)準(zhǔn)的Jav

    2024年02月09日
    瀏覽(31)
  • 學(xué)習(xí) [Spring MVC] 的JSR 303和攔截器,提高開發(fā)效率

    學(xué)習(xí) [Spring MVC] 的JSR 303和攔截器,提高開發(fā)效率

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? 艷艷耶?? :個(gè)人主頁 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ???個(gè)人專欄 : 《推薦】Spring與Mybatis集成整合》 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ??? ??生活的理想,不斷更

    2024年02月09日
    瀏覽(27)
  • “JSR303和攔截器在Java Web開發(fā)中的應(yīng)用與實(shí)踐“

    “JSR303和攔截器在Java Web開發(fā)中的應(yīng)用與實(shí)踐“

    在Java Web開發(fā)過程中,我們經(jīng)常會遇到需要對輸入數(shù)據(jù)進(jìn)行驗(yàn)證和處理,同時(shí)需要對請求進(jìn)行攔截與控制的需求。為了方便實(shí)現(xiàn)這些功能,我們可以使用JSR303驗(yàn)證框架和攔截器技術(shù)。本篇博客將介紹JSR303和攔截器的基本概念,并探討它們在Java Web開發(fā)中的應(yīng)用與實(shí)踐。 什么是

    2024年02月09日
    瀏覽(28)
  • Python-Python高階技巧:HTTP協(xié)議、靜態(tài)Web服務(wù)器程序開發(fā)、循環(huán)接收客戶端的連接請求

    Python-Python高階技巧:HTTP協(xié)議、靜態(tài)Web服務(wù)器程序開發(fā)、循環(huán)接收客戶端的連接請求

    當(dāng)前版本號[20231114]。 版本 修改說明 20231114 初版 1.1 網(wǎng)址的概念 網(wǎng)址又稱為URL,URL的英文全拼是(Uniform Resoure Locator),表達(dá)的意思是 統(tǒng)一資源定位符 ,通俗理解就是網(wǎng)絡(luò)資源地址。 URL地址:https://www.itcast.com/18/1122/10/E178J2O4000189FH.html 1.2 URL的組成 域名 : IP地址的別名 ,它是用

    2024年02月04日
    瀏覽(39)
  • FRP內(nèi)網(wǎng)穿透參數(shù)配置+服務(wù)器與客戶端的簡易配置+完整配置詳解(Windows)

    有設(shè)備A,想訪問處于局域網(wǎng)的設(shè)備C時(shí),可以通過處在公網(wǎng)的設(shè)備B進(jìn)行轉(zhuǎn)發(fā) 前提條件:一個(gè)有公網(wǎng)IP的電腦,云服務(wù)器、有公網(wǎng)IPV4/6的設(shè)備均可,如果使用ipv6模式,那么設(shè)備BC都必須支持ipv6才行,ipv6地址除了bind_addr和server_addr,都要用[]括起來 本文基于:v0.48.0版本 官網(wǎng): 官

    2024年02月05日
    瀏覽(30)
  • samba客戶端的使用與服務(wù)端的搭建

    samba客戶端的使用與服務(wù)端的搭建

    samba是SMB文件共享協(xié)議的應(yīng)用軟件,可以讓Linux系統(tǒng)和Windows系統(tǒng)之間相互共享資源。 在Linux系統(tǒng)中使用smbd服務(wù)器提供提供共享資源;使用smbclient去訪問其他smbd服務(wù)器所提供的共享資源。 在Windows中有SMB/CIFS服務(wù)器和客戶端。 SMB(Server Message Block)協(xié)議是一種在局域網(wǎng)上共享資

    2024年02月02日
    瀏覽(23)
  • git客戶端的使用

    git客戶端的使用

    分布式版本控制工具。 具有中央服務(wù)器倉庫和本地倉庫。 客戶端下載:GitHub Desktop | Simple collaboration from your desktop 左上角: File - New repository 本地的兩個(gè)倉庫: 查看當(dāng)前倉庫的路徑并打開: 注意: 路徑①是用戶可以手動操作文件的工作目錄;路徑②存放該倉庫所有的操作、

    2024年02月06日
    瀏覽(29)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包