欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談spring方法級參數(shù)校驗(@Validated)

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

依賴的jar包:

spring相關jar包版本:4.3.1.RELEASE

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

一、配置與注入 MethodValidationPostProcessor

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

<!--注冊方法驗證的處理器-->
<bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor"/>

二、需要在驗證的類上(最好在接口上)添加注解 @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 {
  /**
   * 唯一鍵,項目唯一標識(一般是項目名稱)
   */
  @NotBlank(message = "重要參數(shù)不能為空")
  private String sessionId;
 
  /**
   * 項目的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 {
 
  /**
   * 設置一個字符串類型的值,如果記錄存在則覆蓋原有value
   *
   * @param key   值對應的鍵
   * @param value 值
   * @return 狀態(tài)碼, 成功則返回OK
   */
  String set(@NotBlank(message = "key值不能為空") String key, String value, @Min(1) int expireSeconds);

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

@ControllerAdvice
public class GlobalExceptionHandler {
  private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
  /**
   * 處理接口數(shù)據(jù)驗證異常
   */
  @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ù)驗證異常
   */
  @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);
  }
 
  // 對返回數(shù)據(jù)進行截取和編碼處理,防止中文亂碼和返回數(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報錯:", e);
      }
      rtnMessage = "{\"message\":\"" + rtnMessage + "\",\"status\":\"error\"}";
      return rtnMessage;
    }
  }
}

四、支持的注解如下:

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

@AssertFalse 對應參數(shù)為false

@AssertTrue 對應參數(shù)為true

@DecimalMax("1") 對應小數(shù)的最大值

@DecimalMin("1") 對應小數(shù)的最小值

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

@Future Date只接受將來的時間

@Past Date只接受過去的時間

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

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

@NotNull 不接受Null值

@Null 只接受Null值

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

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

hibernate validation

@CreditCardNumber Luhn算法校驗,用于防止用戶錯誤輸入,并不真實校驗信用卡號

@EAN 歐洲商品標碼校驗

@Email 郵箱校驗

@Length 校驗string的長度

@LuhnCheck Luhn算法校驗

@NotBlank 字符串非null非空

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

@ParameterScriptAssert 使用腳本進行校驗支持JSR223腳本

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

@SafeHtml 校驗是否包含惡意腳本

@URL 合法URL

@Validated校驗的坑

f95538323153205dff48ff1de0147b0f9d6.jpg

BindingResult必須緊挨著放在實體的后面,否則跳轉后

b899c6aa2099a68316487e8f847311c98fc.jpg

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

相關文章

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

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

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

    詳解Mybatis中的PooledDataSource

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

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

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

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

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

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

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

    kafka運維consumer-groups.sh消費者組管理

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

    springboot帶有進度條的上傳功能完整實例

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

    Spring框架學習筆記之方法注解@Bean的使用

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

    詳解MyBatis中column屬性的總結

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

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

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

最新評論