java開(kāi)發(fā)validate方法中校驗(yàn)工具類詳解
validate方法中校驗(yàn)工具類
日常Java開(kāi)發(fā)中,我們使用validate的校驗(yàn)是很方便的,但是也有一些特殊情況需要單獨(dú)處理,
例如:導(dǎo)入Excel校驗(yàn),傳入的是MultipartFile文件類型,我們不能使用注解進(jìn)行校驗(yàn)實(shí)體信息,只能通過(guò)先解析成實(shí)體類然后進(jìn)行校驗(yàn),此時(shí)已經(jīng)到了方法里面,不能使用校驗(yàn)注解來(lái)處理了,我們應(yīng)該如何處理這類情況呢?
一般情況下,我們校驗(yàn)用的@Validated或者@Valid注解是直接在controller中添加,
然后全局異常處理 @RestControllerAdvice 中 進(jìn)行攔截處理并返回所需校驗(yàn)提示信息。
但是,如果在方法Service中如何使用validate方法校驗(yàn)?zāi)兀幼⒔馐遣荒苌У?,因?yàn)樵创a沒(méi)有直接這樣處理。
不過(guò),我們可以使用源碼提供的ValidatorFactory工廠的Validator校驗(yàn)器的validate方法。
import lombok.experimental.UtilityClass; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.hibernate.validator.HibernateValidator; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import javax.validation.ValidatorFactory; import java.util.List; import java.util.Set; /** * validate方法中校驗(yàn)工具類 * <p> * 只要在實(shí)體中加上相應(yīng)的validate的相關(guān)注解即可 * </p> * * @author Zed */ @UtilityClass public class ValidateTools { /** * 初始化檢查器 */ private static final ValidatorFactory VALIDATOR_FACTORY = Validation.byProvider(HibernateValidator.class).configure().failFast(false).buildValidatorFactory(); private static final Validator VALIDATOR = VALIDATOR_FACTORY.getValidator(); /** * 校驗(yàn)返回異常信息 * * @param t 實(shí)體 * @param <T> 實(shí)體泛型 */ public static <T> String validStr(T t) { // 構(gòu)造返回信息 StringBuilder validMessage = new StringBuilder(); // 檢查實(shí)體T Set<ConstraintViolation<T>> set = VALIDATOR.validate(t); // 循環(huán)set,獲取檢查結(jié)果 for (ConstraintViolation<T> vo : set) { validMessage.append(vo.getMessage()).append(";"); } return validMessage.toString(); } /** * 校驗(yàn)實(shí)體拋出異常 * * @param t 實(shí)體 * @param <T> 實(shí)體泛型 */ public static <T> void valid(T t) { String validStr = validStr(t); // 拋出業(yè)務(wù)異常 if (StringUtils.isNotBlank(validStr)) { throw new BusinessException(validStr); } } /** * 校驗(yàn)集合拋出異常 * * @param list 列表 * @param <T> 實(shí)體泛型 */ public static <T> void valid(List<T> list) { if (CollectionUtils.isEmpty(list)) { throw new BusinessException("數(shù)據(jù)不存在!"); } // 構(gòu)造返回信息 StringBuilder validMessageTotal = new StringBuilder(); // 遍歷 for (int i = 0; i < list.size(); i++) { String validStr = validStr(list.get(i)); if (StringUtils.isNotBlank(validStr)) { String msg = String.format("第%d條數(shù)據(jù)校驗(yàn)結(jié)果:[%s]\n", i + 1, validStr); validMessageTotal.append(msg); } } // 拋出業(yè)務(wù)異常 if (StringUtils.isNotBlank(validMessageTotal.toString())) { throw new BusinessException(validMessageTotal.toString()); } } }
BusinessException是自己定義的業(yè)務(wù)異常類,然后在全局異常處理中增加這個(gè)異常攔截就行了。
僅供參考,實(shí)際開(kāi)發(fā)請(qǐng)仔細(xì)測(cè)試找出合適的解決辦法。
以上就是java開(kāi)發(fā)validate方法中校驗(yàn)工具類詳解的詳細(xì)內(nèi)容,更多關(guān)于java validate方法校驗(yàn)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Spring Boot使用模板freemarker的示例代碼
本篇文章主要介紹了Spring Boot使用模板freemarker的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10SpringBoot服務(wù)端數(shù)據(jù)校驗(yàn)過(guò)程詳解
這篇文章主要介紹了SpringBoot服務(wù)端數(shù)據(jù)校驗(yàn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02Jenkins配置自動(dòng)發(fā)送郵件過(guò)程圖解
這篇文章主要介紹了jenkins配置自動(dòng)發(fā)送郵件過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02詳解idea maven nexus 常見(jiàn)命令配置
這篇文章主要介紹了idea maven nexus 常見(jiàn)命令配置的相關(guān)知識(shí),通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04IDEA?Error:java:無(wú)效的源發(fā)行版:13的解決過(guò)程
之前用idea運(yùn)行時(shí),也會(huì)出現(xiàn)這種情況,后面通過(guò)網(wǎng)上的資料解決了這個(gè)問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于IDEA?Error:java:無(wú)效的源發(fā)行版:13的解決過(guò)程,需要的朋友可以參考下2023-01-01