国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring 中@Validated 分組校驗的使用解析

Spring 中@Validated 分組校驗的使用解析

2022-02-23 13:10妖四靈.Shuen Java教程

這篇文章主要介紹了Spring 中@Validated 分組校驗的使用解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Spring @Validated分組校驗的使用

通過本文你能學習到@Validated 的基本使用,以及如何再spring-boot 中進行數據異常的統一處理

Spring Validation驗證框架對參數的驗證機制提供了@Validated(Spring's JSR-303規范,是標準JSR-303的一個變種),javax提供了@Valid(標準JSR-303規范),配合BindingResult可以直接提供參數驗證結果。

在檢驗入參是否符合規范時,使用@Validated或者@Valid在基本驗證功能上沒有太多區別。但是在分組、注解地方、嵌套驗證等功能上兩個有所不同,總體來說@validated 相當于 @Valid 驗證的升級版,功能更加強大。

接下來我們直接看下如何使用

引入POM依賴

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

定義公共分組class(用于標記分組,可以像后面定義在Vo里面,但是建議一些常用的定義在外部),如下

public interface Add {
}
public interface Edit {
}

Spring 中@Validated 分組校驗的使用解析

定義接收數據的Vo

注意注解中分組的的使用,為了演示,同時在內部定義了一個特殊分組類

import com.example.jsr.commmon.Add;
import com.example.jsr.commmon.Edit;
import org.hibernate.validator.constraints.NotBlank; 
import javax.validation.constraints.Pattern; 
public class ParamsVo {

  //特殊用于修改年齡 標記使用 靈活放置位置
  public interface ModifyAge {
  }

  //年齡是1-120之間有效
  public static final String AGE_REG = "/^(?:[1-9][0-9]?|1[01][0-9]|120)$/";

  @NotBlank(
          groups = {Edit.class, ParamsVo.ModifyAge.class},
          message = "失敗,id不能為空"
  )
  private String id;

  @NotBlank(groups = {Edit.class, Add.class}, message = "失敗,名字不能為空")
  private String name;

  //自定義一個正則
  @NotBlank(groups = {Add.class, ParamsVo.ModifyAge.class},
          message = "失敗,請填寫age"
  )
  @Pattern(regexp = AGE_REG,groups = {Add.class, ParamsVo.ModifyAge.class},
          message = "失敗,請填寫正確age"
  )
  private String age; 
  ...省略setter getter 方法....
}

統一異常處理類

import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
* 全局異常處理
*/
@ControllerAdvice
public class GlobalExceptionHandler {

  @ExceptionHandler(BindException.class)
  @ResponseBody
  public String handlerUnexpectedTypeException(BindException ex){
      BindingResult result = ex.getBindingResult();
      if (result.hasErrors()) {
          FieldError fieldError = result.getFieldError();
          if (fieldError != null) {
              return fieldError.getDefaultMessage();
          }
      }
      return "失敗,請刷新重試";
  } 
  @ExceptionHandler(Exception.class)
  @ResponseBody
  public String handlerException(Exception ex){
      ex.printStackTrace();
      return "失敗,請刷新重試";
  }
}

測試類

import com.example.jsr.Vo.ParamsVo;
import com.example.jsr.commmon.Add;
import com.example.jsr.commmon.Edit;
import org.springframework.stereotype.Controller;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/validated/test")
public class ValidatedTestController {

  @RequestMapping("/add")
  @ResponseBody
  public String add(
          @Validated(Add.class)ParamsVo paramsVo){
      System.out.println(String.format("add obj = {%s}",paramsVo.toString()));
      return "success";
  } 
  @RequestMapping("/edit")
  @ResponseBody
  public String editAll(
          @Validated({Edit.class,ParamsVo.ModifyAge.class})ParamsVo paramsVo){
      System.out.println(String.format("edit obj = {%s}",paramsVo.toString()));
      return "success"; 
  }
}

頁面效果測試

不填age

Spring 中@Validated 分組校驗的使用解析

填入一個錯誤age

Spring 中@Validated 分組校驗的使用解析

到此為止,基本的使用相信也是沒有問題了

 

使用@Validated分組遇到的坑

在使用@Validate注解分組校驗時,如果指定分組,所有的需要驗證的屬性都必須添加指定分組才會校驗

Spring 中@Validated 分組校驗的使用解析

Spring 中@Validated 分組校驗的使用解析

解決辦法

沒有指明分組的屬性都屬于Default,所以分組接口繼承Default就可以解決

Spring 中@Validated 分組校驗的使用解析

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://shuen.blog.csdn.net/article/details/107099859

延伸 · 閱讀

精彩推薦
  • Java教程Spring單數據源的配置詳解

    Spring單數據源的配置詳解

    spring數據源的配置網絡上有很多例子,這里我也來介紹一下單數據源配置的例子,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    程序員阿牛10652021-12-05
  • Java教程淺析JAVA 循環結構

    淺析JAVA 循環結構

    這篇文章主要介紹了JAVA 循環結構的相關資料,文中講解的非常細致,示例代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下...

    菜鳥教程4512020-07-19
  • Java教程java 橋模式(Bridge Pattern)詳解

    java 橋模式(Bridge Pattern)詳解

    這篇文章主要介紹了java 橋模式(Bridge Pattern)詳解的相關資料,需要的朋友可以參考下...

    java教程網5122020-06-20
  • Java教程Java中ArrayList初始化的四種方法詳解

    Java中ArrayList初始化的四種方法詳解

    這篇文章主要介紹了Java中ArrayList初始化的四種方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下...

    稀土掘金12202021-09-03
  • Java教程SpringBoot整合SpringDataJPA

    SpringBoot整合SpringDataJPA

    這篇文章主要介紹了SpringBoot整合SpringDataJPA代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參...

    大仙~猛5362021-10-13
  • Java教程Java實現實時監控目錄下文件變化的方法

    Java實現實時監控目錄下文件變化的方法

    今天小編就為大家分享一篇關于Java實現實時監控目錄下文件變化的方法,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起...

    夢幻逝水3392019-06-21
  • Java教程Java Cache詳解及簡單實現

    Java Cache詳解及簡單實現

    這篇文章主要介紹了 Java Cache詳解及簡單實現的相關資料,需要的朋友可以參考下 ...

    EthanPark4462020-08-03
  • Java教程java 轉發和重定向區別及實例代碼

    java 轉發和重定向區別及實例代碼

    這篇文章主要介紹了java 轉發和重定向區別及實例代碼的相關資料,需要的朋友可以參考下...

    服務器之家3932020-07-06
主站蜘蛛池模板: 99久久视频 | a级在线免费视频 | 久久久高清 | a久久| 人人澡人人透人人爽 | 久一久久 | 色毛片 | 99精品视频免费观看 | 最新中文字幕 | 欧产日产国产一区 | 91在线一区二区 | 日韩黄色片免费看 | 久久精品国产99国产精2020新增功能 | 91色爱| 亚洲区视频 | 亚洲欧美一级 | 国产精品3区 | 91嫩草国产露脸精品国产 | 九九资源站| 在线亚洲电影 | 国产高清精品一区二区三区 | 亚洲在线看 | 美国特级a毛片免费网站 | 国产看片网站 | 91免费网 | 婷色综合 | 成人在线免费看视频 | 91天堂网 | 日韩在线中文 | 亚洲视频精品 | 成人免费网站在线观看 | 美女国产精品 | 黄色在线不卡 | 91久久国产综合久久 | 国产成人在线看 | 欧美一级片在线观看 | 91短视频版在线观看www免费 | 99久久婷婷国产综合精品电影 | 精品96久久久久久中文字幕无 | 免费日本视频 | 亚洲综合自拍 |