一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - Spring 中@Validated 分組校驗(yàn)的使用解析

Spring 中@Validated 分組校驗(yàn)的使用解析

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

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

Spring @Validated分組校驗(yàn)的使用

通過(guò)本文你能學(xué)習(xí)到@Validated 的基本使用,以及如何再spring-boot 中進(jìn)行數(shù)據(jù)異常的統(tǒng)一處理

Spring Validation驗(yàn)證框架對(duì)參數(shù)的驗(yàn)證機(jī)制提供了@Validated(Spring's JSR-303規(guī)范,是標(biāo)準(zhǔn)JSR-303的一個(gè)變種),javax提供了@Valid(標(biāo)準(zhǔn)JSR-303規(guī)范),配合BindingResult可以直接提供參數(shù)驗(yàn)證結(jié)果。

在檢驗(yàn)入?yún)⑹欠穹弦?guī)范時(shí),使用@Validated或者@Valid在基本驗(yàn)證功能上沒(méi)有太多區(qū)別。但是在分組、注解地方、嵌套驗(yàn)證等功能上兩個(gè)有所不同,總體來(lái)說(shuō)@validated 相當(dāng)于 @Valid 驗(yàn)證的升級(jí)版,功能更加強(qiáng)大。

接下來(lái)我們直接看下如何使用

引入POM依賴

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

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

public interface Add {
}
public interface Edit {
}

Spring 中@Validated 分組校驗(yàn)的使用解析

定義接收數(shù)據(jù)的Vo

注意注解中分組的的使用,為了演示,同時(shí)在內(nèi)部定義了一個(gè)特殊分組類

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 {

  //特殊用于修改年齡 標(biāo)記使用 靈活放置位置
  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;

  //自定義一個(gè)正則
  @NotBlank(groups = {Add.class, ParamsVo.ModifyAge.class},
          message = "失敗,請(qǐng)?zhí)顚慳ge"
  )
  @Pattern(regexp = AGE_REG,groups = {Add.class, ParamsVo.ModifyAge.class},
          message = "失敗,請(qǐng)?zhí)顚懻_age"
  )
  private String age; 
  ...省略setter getter 方法....
}

統(tǒng)一異常處理類

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 "失敗,請(qǐng)刷新重試";
  } 
  @ExceptionHandler(Exception.class)
  @ResponseBody
  public String handlerException(Exception ex){
      ex.printStackTrace();
      return "失敗,請(qǐng)刷新重試";
  }
}

測(cè)試類

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"; 
  }
}

頁(yè)面效果測(cè)試

不填age

Spring 中@Validated 分組校驗(yàn)的使用解析

填入一個(gè)錯(cuò)誤age

Spring 中@Validated 分組校驗(yàn)的使用解析

到此為止,基本的使用相信也是沒(méi)有問(wèn)題了

 

使用@Validated分組遇到的坑

在使用@Validate注解分組校驗(yàn)時(shí),如果指定分組,所有的需要驗(yàn)證的屬性都必須添加指定分組才會(huì)校驗(yàn)

Spring 中@Validated 分組校驗(yàn)的使用解析

Spring 中@Validated 分組校驗(yàn)的使用解析

解決辦法

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

Spring 中@Validated 分組校驗(yàn)的使用解析

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品成人 | 日韩高清在线高清免费 | 日韩有码 | 国产乱子伦在线观看不卡 | bl双性受乖调教改造身体 | 成年人免费观看 | 日本不卡不码高清免费观看 | 午夜欧美精品久久久久久久 | 青青青国产精品国产精品久久久久 | 日韩国产欧美成人一区二区影院 | 卫生间被教官做好爽HH视频 | 色老板在线播放 | 我的绝色岳每雯雯 | 亚洲色图欧美偷拍 | 青青在线国产视频 | 五月天色综合 | 精品国产麻豆免费人成网站 | 男人肌肌捅女人 | 亚洲品质自拍视频网站 | 欧美一级鲁丝片免费看 | 久久亚洲成a人片 | 草莓视频首页 | 欧美一区二区三区大片 | 色老板成人永久免费视频 | 91东航翘臀女神在线播放 | 欧美在线播放一区二区 | 国产成人综合一区人人 | 啪一啪日一日 | 国产探花视频在线观看 | 纲手被强喷水羞羞漫画 | 精品女同一区二区三区免费站 | 国产免费看视频 | voyeur 中国女厕 亚洲女厕 | 亚洲国产精品热久久 | 欧美粗黑巨大gay | 国产亚洲小视频 | 亚洲精品卡一卡2卡3卡4卡 | 五月最新女厕所高跟嘘嘘 | 美女被草出水 | 亚洲色图欧美视频 | 西西人体大胆啪啪私拍色约约 |