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

淺談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ù)的長(zhǎng)度min/max為最小/最大長(zhǎng)度

hibernate validation

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

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

@Email 郵箱校驗(yàn)

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

@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 實(shí)現(xiàn)FTP服務(wù)實(shí)例詳解

    Java 實(shí)現(xiàn)FTP服務(wù)實(shí)例詳解

    這篇文章主要介紹了Java 實(shí)現(xiàn)FTP服務(wù)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Java解決計(jì)算相鄰兩個(gè)數(shù)的最大差值的問題

    Java解決計(jì)算相鄰兩個(gè)數(shù)的最大差值的問題

    今天給大家?guī)硪坏浪惴}:給定一個(gè)數(shù)組,求如果排序之后,相鄰兩數(shù)的最大差值。要求時(shí)間復(fù)雜度O(N),且要求不能用非基于比較的排序??靵砀S小編一起學(xué)習(xí)一下如何解決這一問題吧
    2021-12-12
  • java連接Oracle數(shù)據(jù)庫的工具類

    java連接Oracle數(shù)據(jù)庫的工具類

    這篇文章主要介紹了java連接Oracle數(shù)據(jù)庫的工具類,非常的實(shí)用,需要的小伙伴參考下。
    2015-03-03
  • Java關(guān)鍵字詳解之final static this super的用法

    Java關(guān)鍵字詳解之final static this super的用法

    this用來調(diào)用目前類自身的成員變量,super多用來調(diào)用父類的成員,final多用來定義常量用的,static定義靜態(tài)變量方法用的,靜態(tài)變量方法只能被類本身調(diào)用,下文將詳細(xì)介紹,需要的朋友可以參考下
    2021-10-10
  • Springboot配置管理Externalized?Configuration深入探究

    Springboot配置管理Externalized?Configuration深入探究

    這篇文章主要介紹了Springboot配置管Externalized?Configuration深入探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • mybatis-plugin插件執(zhí)行原理解析

    mybatis-plugin插件執(zhí)行原理解析

    這篇文章主要介紹了mybatis-plugin插件執(zhí)行原理,我們就需要來研究下Executor,ParameterHandler,ResultSetHandler,StatementHandler這4個(gè)對(duì)象的具體跟sql相關(guān)的方法,然后再進(jìn)行修改,就可以直接起到aop的作用,需要的朋友可以參考下
    2022-10-10
  • Java 并發(fā)編程:volatile的使用及其原理解析

    Java 并發(fā)編程:volatile的使用及其原理解析

    下面小編就為大家?guī)硪黄狫ava 并發(fā)編程:volatile的使用及其原理解析。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-05-05
  • 詳解Java的Hibernate框架中的List映射表與Bag映射

    詳解Java的Hibernate框架中的List映射表與Bag映射

    這篇文章主要介紹了Java的Hibernate框架中的List映射表與Bag映射,Hibernate是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-12-12
  • springboot實(shí)現(xiàn)極驗(yàn)校驗(yàn)的項(xiàng)目實(shí)踐

    springboot實(shí)現(xiàn)極驗(yàn)校驗(yàn)的項(xiàng)目實(shí)踐

    在系統(tǒng)業(yè)務(wù)中,需要想客戶發(fā)送手機(jī)驗(yàn)證碼,進(jìn)行驗(yàn)證后,才能提交,本文主要介紹了springboot實(shí)現(xiàn)極驗(yàn)校驗(yàn)的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Java Zip文件讀寫操作詳解

    Java Zip文件讀寫操作詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用Java ZipInputstream、ZipOutputStream實(shí)現(xiàn)獲取每個(gè)文件中的內(nèi)容與寫入內(nèi)容,感興趣的可以動(dòng)手嘗試一下
    2022-11-11

最新評(píng)論

金川县| 余姚市| 山阳县| 屏边| 密云县| 夏津县| 仁怀市| 屯昌县| 略阳县| 紫金县| 仙居县| 南丰县| 崇州市| 临桂县| 额尔古纳市| 新野县| 微山县| 隆化县| 昌都县| 开封市| 平定县| 祁东县| 山东省| 高阳县| 栾川县| 宁夏| 仲巴县| 潼关县| 鲁山县| 吐鲁番市| 鄢陵县| 博野县| 上犹县| 柳州市| 嘉黎县| 河西区| 公主岭市| 阳江市| 建水县| 辛集市| 嘉兴市|