摘要:前言最近在開發(fā)某個模塊的功能時,里面包含大量對請求參數(shù)判空和驗證的步驟且參數(shù)繁多,存在大量的重復(fù)判斷,驗證影響代碼的美觀遂決定優(yōu)化這部分代碼。
前言
最近在開發(fā)某個模塊的功能時,里面包含大量對請求參數(shù)判空和驗證的步驟且參數(shù)繁多,存在大量的重復(fù)判斷,驗證影響代碼的美觀遂決定優(yōu)化這部分代碼。SpringBoot自帶了參數(shù)驗證框Hibernate Validator,下面是自己的學(xué)習(xí)筆記。
依賴若使用SptingBoot,在spring-boot-starter-web包中包含此框架依賴,其他框架加入依賴即可
org.hibernate.validator hibernate-validator 6.0.17.Final
個人認為官方文檔是最好的資料,如有需要請瀏覽: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; // 密碼需要匹配正則表達式 @Pattern(regexp = "^[A-Z]{0,3}[0-9]{5,10}") private String password; // 驗證是否是正確的電子郵件格式 @Email private String email; // 家庭住址不為空 @NotNull private String address; @Override public String toString() { return JSON.toJSONString(this); } }
使用Validator校驗傳入?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() { // 獲得默認的Validator Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); Consumer consumer = new Consumer(); consumer.setUserName("longhaicheng"); consumer.setAddress(null); consumer.setEmail("123456789"); // 驗證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ù)校驗失敗返回錯誤消息,也可以定制錯誤消息,通過注解中的message屬性配置
@NotBlank(message = "字段[userName]不可為空") @Pattern(regexp = "^[A-Z]{0,3}[0-9]{5,10}",message = "字段[password]需匹配表達式[{regexp}]") @Email(message = "錯誤的電子郵箱格式") @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() // 快速失敗(即:第一個參數(shù)校驗失敗就返回錯誤信息,而不是校驗所有的參數(shù),并一次性返回所有的錯誤信息) .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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/76196.html
摘要:前言最近在開發(fā)某個模塊的功能時,里面包含大量對請求參數(shù)判空和驗證的步驟且參數(shù)繁多,存在大量的重復(fù)判斷,驗證影響代碼的美觀遂決定優(yōu)化這部分代碼。 前言 最近在開發(fā)某個模塊的功能時,里面包含大量對請求參數(shù)判空和驗證的步驟且參數(shù)繁多,存在大量的重復(fù)判斷,驗證影響代碼的美觀遂決定優(yōu)化這部分代碼。SpringBoot自帶了參數(shù)驗證框Hibernate Validator,下面是自己的學(xué)習(xí)筆記。 ...
摘要:代碼地址簡介是項目中的一個數(shù)據(jù)校驗框架,是的參考實現(xiàn),除了提供了規(guī)范中所有內(nèi)置的實現(xiàn),還有一些附加的。使用能夠?qū)?shù)據(jù)校驗從業(yè)務(wù)代碼中脫離出來,增加代碼可讀性,同時也讓數(shù)據(jù)校驗變得更加方便簡單。 代碼地址 https://github.com/wheel-orga... 簡介 hibernate-validator是Hibernate項目中的一個數(shù)據(jù)校驗框架,是Bean Validati...
摘要:初步使用主要使用注解的方式對進行校驗,第一個例子在需要校驗的字段上指定約束條件然后在中可以這樣調(diào)用,加上注解即可。如果校驗失敗,默認會返回框架的出錯信息。指定到的分組名會全部進行校驗,不指定的不校驗。 Spring Boot - 表單校驗(JSR303&Hibernate Validator) 回顧 Spring Boot - 初識 Hello World Spring Boot -...
摘要:所以就有今天的話題利用注解對進行校驗。利用注解對進行校驗,主要是利用框架,實現(xiàn)了的接口關(guān)于校驗的接口,直接使用非常方便,省時省力。 最近寫業(yè)務(wù)代碼,因為頁面復(fù)雜,導(dǎo)致對應(yīng)的Bean屬性非常多,而產(chǎn)品大佬又提出各種校驗要求。 emmmmmm......如果寫if條件來校驗,那簡直是又臭又長。 所以就有今天的話題——利用注解對Bean進行校驗。 利用注解對Bean進行校驗,主要是利用hib...
摘要:在開發(fā)服務(wù)器端代碼時,我們會遇到對外部傳來的參數(shù)合法性進行驗證,而提供了一些常用的參數(shù)校驗注解,我們可以拿來使用。 在開發(fā)JAVA服務(wù)器端代碼時,我們會遇到對外部傳來的參數(shù)合法性進行驗證,而hibernate-validator提供了一些常用的參數(shù)校驗注解,我們可以拿來使用。1.maven中引入hibernate-validator對應(yīng)的jar: org.hibernate ...
閱讀 3233·2021-11-18 10:02
閱讀 1936·2021-09-22 10:54
閱讀 2988·2019-08-30 15:43
閱讀 2575·2019-08-30 13:22
閱讀 1574·2019-08-29 13:57
閱讀 1041·2019-08-29 13:27
閱讀 731·2019-08-26 14:05
閱讀 2511·2019-08-26 13:30