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

淺談spring方法級(jí)參數(shù)校驗(yàn)(@Validated)

 更新時(shí)間:2021年06月09日 08:59:46   作者:Leonarde_WP  
這篇文章主要介紹了淺談spring方法級(jí)參數(shù)校驗(yàn)(@Validated),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

依賴的jar包:

spring相關(guān)jar包版本:4.3.1.RELEASE

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

一、配置與注入 MethodValidationPostProcessor

注意:spring容器與springMVC容器需要各配置一個(gè),呵呵,大家還是用springBoot吧

<!--注冊(cè)方法驗(yàn)證的處理器-->
<bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor"/>

二、需要在驗(yàn)證的類上(最好在接口上)添加注解 @Validated

例子:

@RequestMapping("/add")
public void add(@Validated CoverageAddDTO coverageAddDTO, HttpServletResponse response) {
  String validateTip = validateParams(coverageAddDTO);
  if (StringUtils.isNotBlank(validateTip)) {
    ajaxJsonErrorMessage(response, validateTip);
    return;
  }
  BaseBO dealResult = coverService.addProjectInfo(coverageAddDTO);
  if (dealResult.getHandleSuccess()) {
    ajaxJsonSuccessMessage(response, "新增成功");
  } else {
    ajaxJsonErrorMessage(response, dealResult.getMessage());
  }
}
 
class CoverageAddDTO {
  /**
   * 唯一鍵,項(xiàng)目唯一標(biāo)識(shí)(一般是項(xiàng)目名稱)
   */
  @NotBlank(message = "重要參數(shù)不能為空")
  private String sessionId;
 
  /**
   * 項(xiàng)目的Git地址
   */
  @NotBlank(message = "重要參數(shù)不能為空")
  @Pattern(regexp = "^git@.*\\.git$", message = "Git地址不符合規(guī)范(git@....git)")
  private String gitUrl;
 
  /**
   * Git上分支名稱
   */
  @NotBlank(message = "重要參數(shù)不能為空")
  private String branchName;

或者

/**
 * @description: jedis操作redis集群-接口方法類
 * @author: wangpeng
 **/
@Validated
public interface JedisClient {
 
  /**
   * 設(shè)置一個(gè)字符串類型的值,如果記錄存在則覆蓋原有value
   *
   * @param key   值對(duì)應(yīng)的鍵
   * @param value 值
   * @return 狀態(tài)碼, 成功則返回OK
   */
  String set(@NotBlank(message = "key值不能為空") String key, String value, @Min(1) int expireSeconds);

三、捕獲 ConstraintViolationException 異常,進(jìn)行后續(xù)提示等處理

@ControllerAdvice
public class GlobalExceptionHandler {
  private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
  /**
   * 處理接口數(shù)據(jù)驗(yàn)證異常
   */
  @ExceptionHandler(ConstraintViolationException.class)
  @ResponseBody
  public String handleMethodArgumentNotValidException(ConstraintViolationException ex) {
    logger.error("ConstraintViolationException:{}", ex.getMessage());
    Iterator<ConstraintViolation<?>>
        iterator = ex.getConstraintViolations().iterator();
    String message = null;
    if (iterator.hasNext()) {
      message = iterator.next().getMessage();
    }
    return encode(message);
  }
 
  /**
   * 處理接口數(shù)據(jù)驗(yàn)證異常
   */
  @ExceptionHandler(BindException.class)
  @ResponseBody
  public String handleMethodArgumentNotValidException(BindException ex) {
    logger.error("BindException:{}", ex.getMessage());
    String message = ex.getFieldErrors().get(0).getDefaultMessage();
    return encode(message);
  }
 
  @ExceptionHandler(Exception.class)   // 捕獲所有逃逸的異常
  @ResponseBody
  public String handleAllUnCatchException(Exception ex) {
    logger.error("未知異常:", ex);
    String message = ex.getMessage();
    return encode(message);
  }
 
  // 對(duì)返回?cái)?shù)據(jù)進(jìn)行截取和編碼處理,防止中文亂碼和返回?cái)?shù)據(jù)量過大
  private String encode(String errorMsg) {
    String rtnMessage = errorMsg;
    if (StringUtils.isBlank(errorMsg)) {
      rtnMessage = "{\"message\":\"error\",\"status\":\"error\"}";
      return rtnMessage;
    } else {
      if (errorMsg.length() > 100) {
        rtnMessage = errorMsg.substring(0, 100);
      }
      // 特殊字符編碼,解決中文亂碼問題
      try {
        rtnMessage = URLEncoder.encode(rtnMessage, "UTF-8");
      } catch (UnsupportedEncodingException e) {
        logger.error("URLEncoder報(bào)錯(cuò):", e);
      }
      rtnMessage = "{\"message\":\"" + rtnMessage + "\",\"status\":\"error\"}";
      return rtnMessage;
    }
  }
}

四、支持的注解如下:

spring支持jsr303以及hibernate中的校驗(yàn)規(guī)則

@AssertFalse 對(duì)應(yīng)參數(shù)為false

@AssertTrue 對(duì)應(yīng)參數(shù)為true

@DecimalMax("1") 對(duì)應(yīng)小數(shù)的最大值

@DecimalMin("1") 對(duì)應(yīng)小數(shù)的最小值

@Digits(integer=1,fraction = 2) 對(duì)應(yīng)數(shù)字整數(shù)(integer)和小數(shù)(fraction)位數(shù)

@Future Date只接受將來的時(shí)間

@Past Date只接受過去的時(shí)間

@Max(100) 數(shù)字最大值

@Min(100) 數(shù)字最小值

@NotNull 不接受Null值

@Null 只接受Null值

@Pattern(regexp="^a$") 正則表達(dá)式regexp為表達(dá)式

@Size(min=1,max=2) 參數(shù)的長度min/max為最小/最大長度

hibernate validation

@CreditCardNumber Luhn算法校驗(yàn),用于防止用戶錯(cuò)誤輸入,并不真實(shí)校驗(yàn)信用卡號(hào)

@EAN 歐洲商品標(biāo)碼校驗(yàn)

@Email 郵箱校驗(yàn)

@Length 校驗(yàn)string的長度

@LuhnCheck Luhn算法校驗(yàn)

@NotBlank 字符串非null非空

@NotEmpty 字符串、集合、map非空

@ParameterScriptAssert 使用腳本進(jìn)行校驗(yàn)支持JSR223腳本

@Range 匹配數(shù)字或表示數(shù)字的字符串的取值范圍

@SafeHtml 校驗(yàn)是否包含惡意腳本

@URL 合法URL

@Validated校驗(yàn)的坑

f95538323153205dff48ff1de0147b0f9d6.jpg

BindingResult必須緊挨著放在實(shí)體的后面,否則跳轉(zhuǎn)后

b899c6aa2099a68316487e8f847311c98fc.jpg

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java讀取配置文件(properties)的時(shí)候,unicode碼轉(zhuǎn)utf-8方式

    java讀取配置文件(properties)的時(shí)候,unicode碼轉(zhuǎn)utf-8方式

    這篇文章主要介紹了java讀取配置文件(properties)的時(shí)候,unicode碼轉(zhuǎn)utf-8方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 詳解Mybatis中的PooledDataSource

    詳解Mybatis中的PooledDataSource

    這篇文章主要介紹了詳解Mybatis中的PooledDataSource,PooledDataSource使用了數(shù)據(jù)庫連接池可以實(shí)現(xiàn)數(shù)據(jù)庫連接池的重復(fù)利用,還能控制連接數(shù)據(jù)庫的連接上限
    2022-06-06
  • SpringCache緩存自定義配置的實(shí)現(xiàn)

    SpringCache緩存自定義配置的實(shí)現(xiàn)

    本文主要介紹了SpringCache緩存自定義配置的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 解決java.util.NoSuchElementException異常正確方法

    解決java.util.NoSuchElementException異常正確方法

    java.util.NoSuchElementException是Java中的一種異常,表示在迭代器或枚舉中找不到元素,這篇文章主要給大家介紹了關(guān)于解決java.util.NoSuchElementException異常的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • SpringBoot 自定義+動(dòng)態(tài)切換數(shù)據(jù)源教程

    SpringBoot 自定義+動(dòng)態(tài)切換數(shù)據(jù)源教程

    這篇文章主要介紹了SpringBoot 自定義+動(dòng)態(tài)切換數(shù)據(jù)源教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • kafka運(yùn)維consumer-groups.sh消費(fèi)者組管理

    kafka運(yùn)維consumer-groups.sh消費(fèi)者組管理

    這篇文章主要為大家介紹了kafka運(yùn)維consumer-groups.sh消費(fèi)者組管理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • springboot帶有進(jìn)度條的上傳功能完整實(shí)例

    springboot帶有進(jìn)度條的上傳功能完整實(shí)例

    這篇文章主要介紹了springboot帶有進(jìn)度條的上傳功能,結(jié)合完整實(shí)例形式分析了springboot帶進(jìn)度條上傳的原理、實(shí)現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • Spring框架學(xué)習(xí)筆記之方法注解@Bean的使用

    Spring框架學(xué)習(xí)筆記之方法注解@Bean的使用

    這篇文章主要給大家介紹了關(guān)于Spring框架學(xué)習(xí)筆記之方法注解@Bean使用的相關(guān)資料,這是一個(gè)我們很常用的注解,作用是指示一個(gè)方法生成一個(gè)由Spring管理的Bean,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • 詳解MyBatis中column屬性的總結(jié)

    詳解MyBatis中column屬性的總結(jié)

    在MyBatis的映射中有column這么一個(gè)屬性,我一直以為它映射的是數(shù)據(jù)庫表中的列名,但經(jīng)過學(xué)習(xí)發(fā)現(xiàn)他似乎映射的是SQL語句中的列名,或者說是查詢結(jié)果所得到的表的列名,這篇文章主要介紹了MyBatis中column屬性的總結(jié),需要的朋友可以參考下
    2022-09-09
  • Mybatis-Plus實(shí)體類注解方法與mapper層和service層的CRUD方法

    Mybatis-Plus實(shí)體類注解方法與mapper層和service層的CRUD方法

    CRUD是指在做計(jì)算處理時(shí)的增加(Create)、讀取查詢(Retrieve)、更新(Update)和刪除(Delete)幾個(gè)單詞的首字母簡寫。主要被用在描述軟件系統(tǒng)中DataBase或者持久層的基本操作功能,下面讓我們一起看看吧
    2022-03-03

最新評(píng)論