日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線(xiàn)咨詢(xún)客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

SpringBoot檢驗(yàn)注解

@Null 限制只能為null

@NotNull 限制必須不為null

@NotEmpty 只作用于字符串類(lèi)型,字符串不為空,并且長(zhǎng)度不為0

@NotBlank 只作用于字符串類(lèi)型,字符串不為空,并且trim()后不為空串

@AssertFalse 限制必須為false

@AssertTrue 限制必須為true

@DecimalMax(value) 限制必須為一個(gè)不大于指定值的數(shù)字

@DecimalMin(value) 限制必須為一個(gè)不小于指定值的數(shù)字

@Digits(integer,fraction) 限制必須為一個(gè)小數(shù),且整數(shù)部分的位數(shù)不能超過(guò)Integer,小數(shù)部分的位數(shù)不能超過(guò)fraction

@Future 限制必須是一個(gè)將來(lái)的日期

@Past 驗(yàn)證注解的元素值(日期類(lèi)型)比當(dāng)前時(shí)間早

@Max(value) 限制必須為一個(gè)不大于指定值的數(shù)字

@Min(value) 限制必須為一個(gè)不小于指定值的數(shù)字

@Pattern(value) 限制必須符合指定的正則表達(dá)式

@Size(max,min) 限制字符長(zhǎng)度必須在min到max之間

@Email 驗(yàn)證注解的元素值是Email,也可以通過(guò)正則表達(dá)式和flag指定自定義的email格式

注意:

@NotNull 適用于任何類(lèi)型被注解的元素必須不能與NULL

@NotEmpty 適用于String Map或者數(shù)組不能為Null且長(zhǎng)度必須大于0

@NotBlank 只能用于String上面 不能為null,調(diào)用trim()后,長(zhǎng)度必須大于0

單個(gè)參數(shù)校驗(yàn)@RestController@RequestMApping("validator/")@Validatedpublic class ValidatorController {@GetMapping("/add")public String add(@NotNull(message = "address不能為空") String address) {return "檢驗(yàn)通過(guò)";

請(qǐng)求:127.0.0.1:8080/validator/add?address=中國(guó)

返回:檢驗(yàn)通過(guò)

請(qǐng)求:127.0.0.1:8080/validator/add

返回:address不能為空

說(shuō)明:在進(jìn)行單個(gè)參數(shù)校驗(yàn)時(shí),一定要在Controler類(lèi)上加@Validated注解,否則校驗(yàn)不會(huì)生效。

實(shí)體類(lèi)參數(shù)校驗(yàn)

實(shí)體User類(lèi)

public class User {@NotBlank(message = "請(qǐng)輸入名稱(chēng)")@Length(message = "名稱(chēng)不能超過(guò)個(gè) {max} 字符", max = 5)public String name;@NotNull(message = "請(qǐng)輸入年齡")@Range(message = "年齡范圍為 {min} 到 {max} 之間", min = 1, max = 100)public Integer age;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}

controller類(lèi)

@RestController@RequestMapping("validator/")public class ValidatorController {@PostMapping("/add")public String addUser(@RequestBody @Valid User user, BindingResult bindingResult) {//查看所有字段是否驗(yàn)證通過(guò)if (bindingResult.hasErrors()) {//返回第一條錯(cuò)誤信息return bindingResult.getAllErrors().get(0).getDefaultMessage();return "檢驗(yàn)通過(guò)";

執(zhí)行如下:


 


 

說(shuō)明:如果采用BindingResult方式來(lái)存儲(chǔ)異常結(jié)果,就必須自己來(lái)處理異常。即接口中有BindingResult參數(shù),就必須使用要有上方7,8,9行代碼進(jìn)行異常處理,否則程序會(huì)正常執(zhí)行。

統(tǒng)一異常管理

實(shí)體User類(lèi),同上。controller類(lèi)如下:

@RequestMapping("validator/")public class ValidatorController {@PostMapping("/add")public String addUser(@Valid @RequestBody User user) {return "檢驗(yàn)通過(guò)";

執(zhí)行結(jié)果:


 

這里沒(méi)有采用BindingResult來(lái)存儲(chǔ)異常,程序在這里會(huì)報(bào)錯(cuò)。可以在這個(gè)地方增加統(tǒng)一異常管理。通過(guò)報(bào)錯(cuò)信息可以知道需要對(duì)MethodArgumentNotValidException進(jìn)行管理,代碼如下:

@RestControllerAdvicepublic class ValidatedExceptionHander {@exceptionHandler(MethodArgumentNotValidException.class)public String MethodArgumentNotValidHandler(MethodArgumentNotValidException exception) {String exceptionInfo = exception.getBindingResult().getAllErrors().get(0).getDefaultMessage();return exceptionInfo;

再次執(zhí)行:


 

使用spring boot校驗(yàn)器

檢驗(yàn)器代碼:

@Componentpublic class ValidatorUtil implements ApplicationContextAware {// 通過(guò)Spring獲得校驗(yàn)器private static Validator validator;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) {Validator validatorBean = applicationContext.getBean(Validator.class);setValidator(validatorBean);public static void setValidator(Validator validatorBean) {if (validatorBean instanceof LocalValidatorFactoryBean) {validator = ((LocalValidatorFactoryBean) validatorBean).getValidator();} else if (validatorBean instanceof SpringValidatorAdapter) {validator = validatorBean.unwrap(Validator.class);} else {validator = validatorBean;public static void validate(T object) {Set> violationSet = validator.validate(object);for (ConstraintViolation violation : violationSet) {throw new ValidationException(violation.getMessage());

統(tǒng)一異常管理:

@RestControllerAdvicepublic class ValidatedExceptionHander {@ExceptionHandler(value = ValidationException.class)public String ValidationException(ValidationException exception) {return exception.getMessage();

controller類(lèi)如下:

@RestController@RequestMapping("validator/")public class ValidatorController {@PostMapping("/add")public String addUser(@RequestBody User user) {ValidatorUtil.validate(user);return "檢驗(yàn)通過(guò)";

執(zhí)行如下:


 

說(shuō)明:這么做的好處是可以自由的對(duì)實(shí)體進(jìn)行檢驗(yàn),與以上方式相比較為靈活。

分組校驗(yàn)

同一個(gè)實(shí)體在不同的操作中的校驗(yàn)方式是不同的,這就要用到分組校驗(yàn)。比如實(shí)體User在新增操作時(shí),id是沒(méi)有的,但是在更新操作時(shí)id又必須存在。通過(guò)下面例子來(lái)講解一下是如何實(shí)現(xiàn)的。

實(shí)體user:

public class User {@NotNull(message = "id不能為空", groups = {User.UpdateGroup.class})@Null(message = "id必須為空", groups = {User.InsertGroup.class})public Integer id;@NotBlank(message = "請(qǐng)輸入名稱(chēng)")@Length(message = "名稱(chēng)不能超過(guò)個(gè) {max} 字符", max = 5)public String name;@NotNull(message = "請(qǐng)輸入年齡")@Range(message = "年齡范圍為 {min} 到 {max} 之間", min = 1, max = 100)public Integer age;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public interface InsertGroup{}public interface UpdateGroup{}

統(tǒng)一異常:

@RestControllerAdvicepublic class ValidatedExceptionHander {@ExceptionHandler(MethodArgumentNotValidException.class)public String MethodArgumentNotValidHandler(MethodArgumentNotValidException exception) {String exceptionInfo = exception.getBindingResult().getAllErrors().get(0).getDefaultMessage();return exceptionInfo;

controller類(lèi):

@RestController@RequestMapping("validator/")public class ValidatorController {@GetMapping("/update")public String updateUser(@Validated(User.UpdateGroup.class) @RequestBody User user) {return "更新成功";@GetMapping("/insert")public String insertUser(@Validated(User.InsertGroup.class) @RequestBody User user) {return "保存成功";

執(zhí)行如下:


 


 

@Validated和@Valid區(qū)別

@Validated 對(duì)@Valid 進(jìn)行了二次封裝,但在分組、注解位置、嵌套驗(yàn)證等功能上有所不同。

不同點(diǎn)

@Valid

@Validated

是Hibernate validation 的 校驗(yàn)注解

是 Spring Validator 的校驗(yàn)注解,是 Hibernate validation 基礎(chǔ)上的增加版

注解位置

用在 構(gòu)造函數(shù)、方法、方法參數(shù) 和 成員屬性上

用在 類(lèi)、方法和方法參數(shù)上。但不能用于成員屬性

嵌套驗(yàn)證

用在級(jí)聯(lián)對(duì)象的成員屬性上面

不支持

分組

無(wú)此功能

提供分組功能,可以在入?yún)Ⅱ?yàn)證時(shí),根據(jù)不同的分組采用不同的驗(yàn)證機(jī)制

分享到:
標(biāo)簽:SpringBoot
用戶(hù)無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定