摘要:前言最近在開發(fā)某個(gè)模塊的功能時(shí),里面包含大量對(duì)請(qǐng)求參數(shù)判空和驗(yàn)證的步驟且參數(shù)繁多,存在大量的重復(fù)判斷,驗(yàn)證影響代碼的美觀遂決定優(yōu)化這部分代碼。
前言
最近在開發(fā)某個(gè)模塊的功能時(shí),里面包含大量對(duì)請(qǐng)求參數(shù)判空和驗(yàn)證的步驟且參數(shù)繁多,存在大量的重復(fù)判斷,驗(yàn)證影響代碼的美觀遂決定優(yōu)化這部分代碼。SpringBoot自帶了參數(shù)驗(yàn)證框Hibernate Validator,下面是自己的學(xué)習(xí)筆記。
依賴若使用SptingBoot,在spring-boot-starter-web包中包含此框架依賴,其他框架加入依賴即可
org.hibernate.validator hibernate-validator 6.0.17.Final
個(gè)人認(rèn)為官方文檔是最好的資料,如有需要請(qǐng)瀏覽:https://docs.jboss.org/hibern...
使用新建類User
package com.longhc.uublog; import com.alibaba.fastjson.JSON; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import javax.validation.constraints.Email; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import java.io.Serializable; @Getter @Setter @NoArgsConstructor public class User implements Serializable { private static final long serialVersionUID = -2164567260938543876L; private String userId; // 字段userName不可為null,且length>0 @NotBlank private String userName; // 密碼需要匹配正則表達(dá)式 @Pattern(regexp = "^[A-Z]{0,3}[0-9]{5,10}") private String password; // 驗(yàn)證是否是正確的電子郵件格式 @Email private String email; // 家庭住址不為空 @NotNull private String address; @Override public String toString() { return JSON.toJSONString(this); } }
使用Validator校驗(yàn)傳入?yún)?shù)是否符合規(guī)則
package com.longhc.uublog; import lombok.extern.slf4j.Slf4j; import org.junit.Test; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import java.util.Set; @Slf4j public class VaildatorTest { @Test public void test() { // 獲得默認(rèn)的Validator Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); Consumer consumer = new Consumer(); consumer.setUserName("longhaicheng"); consumer.setAddress(null); consumer.setEmail("123456789"); // 驗(yàn)證consumer是否符合要求,并返回set集合,若set集合size()返回>0,說明存在違規(guī)的參數(shù),通過日志打印 Set> constraintViolations = validator.validate(consumer); if (constraintViolations.size() > 0) { for (ConstraintViolation constraintViolation : constraintViolations) { String message = constraintViolation.getMessage(); log.error("message:{}", message); } } } }
日志返回:
參數(shù)校驗(yàn)失敗返回錯(cuò)誤消息,也可以定制錯(cuò)誤消息,通過注解中的message屬性配置
@NotBlank(message = "字段[userName]不可為空") @Pattern(regexp = "^[A-Z]{0,3}[0-9]{5,10}",message = "字段[password]需匹配表達(dá)式[{regexp}]") @Email(message = "錯(cuò)誤的電子郵箱格式") @NotNull(message = "家庭住址不為空")
要在Spring中使用此框架
package com.longhc.uublog; import lombok.extern.slf4j.Slf4j; import org.hibernate.validator.HibernateValidator; import org.springframework.stereotype.Component; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import java.util.Set; @Component @Slf4j public class ValidatorUtil { public static Validator getValidator() { // 使用HibernateValidator Validator validator = Validation.byProvider(HibernateValidator.class) .configure() // 快速失敗(即:第一個(gè)參數(shù)校驗(yàn)失敗就返回錯(cuò)誤信息,而不是校驗(yàn)所有的參數(shù),并一次性返回所有的錯(cuò)誤信息) .failFast(true) .buildValidatorFactory() .getValidator(); return validator; } /** * @param object object * @param groups groups */ public void validateObject(Object object, Class>... groups) { Set> constraintViolations = getValidator().validate(object, groups); if (constraintViolations.size() > 0) { for (ConstraintViolation
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/77917.html
摘要:前言最近在開發(fā)某個(gè)模塊的功能時(shí),里面包含大量對(duì)請(qǐng)求參數(shù)判空和驗(yàn)證的步驟且參數(shù)繁多,存在大量的重復(fù)判斷,驗(yàn)證影響代碼的美觀遂決定優(yōu)化這部分代碼。 前言 最近在開發(fā)某個(gè)模塊的功能時(shí),里面包含大量對(duì)請(qǐng)求參數(shù)判空和驗(yàn)證的步驟且參數(shù)繁多,存在大量的重復(fù)判斷,驗(yàn)證影響代碼的美觀遂決定優(yōu)化這部分代碼。SpringBoot自帶了參數(shù)驗(yàn)證框Hibernate Validator,下面是自己的學(xué)習(xí)筆記。 ...
摘要:代碼地址簡(jiǎn)介是項(xiàng)目中的一個(gè)數(shù)據(jù)校驗(yàn)框架,是的參考實(shí)現(xiàn),除了提供了規(guī)范中所有內(nèi)置的實(shí)現(xiàn),還有一些附加的。使用能夠?qū)?shù)據(jù)校驗(yàn)從業(yè)務(wù)代碼中脫離出來,增加代碼可讀性,同時(shí)也讓數(shù)據(jù)校驗(yàn)變得更加方便簡(jiǎn)單。 代碼地址 https://github.com/wheel-orga... 簡(jiǎn)介 hibernate-validator是Hibernate項(xiàng)目中的一個(gè)數(shù)據(jù)校驗(yàn)框架,是Bean Validati...
摘要:初步使用主要使用注解的方式對(duì)進(jìn)行校驗(yàn),第一個(gè)例子在需要校驗(yàn)的字段上指定約束條件然后在中可以這樣調(diào)用,加上注解即可。如果校驗(yàn)失敗,默認(rèn)會(huì)返回框架的出錯(cuò)信息。指定到的分組名會(huì)全部進(jìn)行校驗(yàn),不指定的不校驗(yàn)。 Spring Boot - 表單校驗(yàn)(JSR303&Hibernate Validator) 回顧 Spring Boot - 初識(shí) Hello World Spring Boot -...
摘要:所以就有今天的話題利用注解對(duì)進(jìn)行校驗(yàn)。利用注解對(duì)進(jìn)行校驗(yàn),主要是利用框架,實(shí)現(xiàn)了的接口關(guān)于校驗(yàn)的接口,直接使用非常方便,省時(shí)省力。 最近寫業(yè)務(wù)代碼,因?yàn)轫撁鎻?fù)雜,導(dǎo)致對(duì)應(yīng)的Bean屬性非常多,而產(chǎn)品大佬又提出各種校驗(yàn)要求。 emmmmmm......如果寫if條件來校驗(yàn),那簡(jiǎn)直是又臭又長(zhǎng)。 所以就有今天的話題——利用注解對(duì)Bean進(jìn)行校驗(yàn)。 利用注解對(duì)Bean進(jìn)行校驗(yàn),主要是利用hib...
摘要:在開發(fā)服務(wù)器端代碼時(shí),我們會(huì)遇到對(duì)外部傳來的參數(shù)合法性進(jìn)行驗(yàn)證,而提供了一些常用的參數(shù)校驗(yàn)注解,我們可以拿來使用。 在開發(fā)JAVA服務(wù)器端代碼時(shí),我們會(huì)遇到對(duì)外部傳來的參數(shù)合法性進(jìn)行驗(yàn)證,而hibernate-validator提供了一些常用的參數(shù)校驗(yàn)注解,我們可以拿來使用。1.maven中引入hibernate-validator對(duì)應(yīng)的jar: org.hibernate ...
閱讀 3195·2021-09-06 15:02
閱讀 2242·2019-08-30 15:48
閱讀 3438·2019-08-29 11:08
閱讀 3280·2019-08-26 13:55
閱讀 2439·2019-08-26 13:35
閱讀 3160·2019-08-26 12:11
閱讀 2596·2019-08-26 11:48
閱讀 880·2019-08-26 11:42