亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java開發(fā)validate方法中校驗工具類詳解

 更新時間:2022年09月16日 10:06:35   作者:奇點之光  
這篇文章主要為大家介紹了java開發(fā)validate方法中校驗工具類詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

validate方法中校驗工具類

日常Java開發(fā)中,我們使用validate的校驗是很方便的,但是也有一些特殊情況需要單獨處理,

例如:導(dǎo)入Excel校驗,傳入的是MultipartFile文件類型,我們不能使用注解進行校驗實體信息,只能通過先解析成實體類然后進行校驗,此時已經(jīng)到了方法里面,不能使用校驗注解來處理了,我們應(yīng)該如何處理這類情況呢?

一般情況下,我們校驗用的@Validated或者@Valid注解是直接在controller中添加,
然后全局異常處理 @RestControllerAdvice 中 進行攔截處理并返回所需校驗提示信息。

但是,如果在方法Service中如何使用validate方法校驗?zāi)?,加注解是不能生效的,因為源碼沒有直接這樣處理。

不過,我們可以使用源碼提供的ValidatorFactory工廠的Validator校驗器的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方法中校驗工具類
 * <p>
 * 只要在實體中加上相應(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();
    /**
     * 校驗返回異常信息
     *
     * @param t   實體
     * @param <T> 實體泛型
     */
    public static <T> String validStr(T t) {
        // 構(gòu)造返回信息
        StringBuilder validMessage = new StringBuilder();
        // 檢查實體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();
    }
    /**
     * 校驗實體拋出異常
     *
     * @param t   實體
     * @param <T> 實體泛型
     */
    public static <T> void valid(T t) {
        String validStr = validStr(t);
        // 拋出業(yè)務(wù)異常
        if (StringUtils.isNotBlank(validStr)) {
            throw new BusinessException(validStr);
        }
    }
    /**
     * 校驗集合拋出異常
     *
     * @param list 列表
     * @param <T>  實體泛型
     */
    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ù)校驗結(jié)果:[%s]\n", i + 1, validStr);
                validMessageTotal.append(msg);
            }
        }
        // 拋出業(yè)務(wù)異常
        if (StringUtils.isNotBlank(validMessageTotal.toString())) {
            throw new BusinessException(validMessageTotal.toString());
        }
    }
}

BusinessException是自己定義的業(yè)務(wù)異常類,然后在全局異常處理中增加這個異常攔截就行了。

僅供參考,實際開發(fā)請仔細測試找出合適的解決辦法。

以上就是java開發(fā)validate方法中校驗工具類詳解的詳細內(nèi)容,更多關(guān)于java validate方法校驗的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java常用內(nèi)置注解用法分析

    Java常用內(nèi)置注解用法分析

    這篇文章主要介紹了Java常用內(nèi)置注解用法,結(jié)合實例形式分析了java使用@SuppressWarnings關(guān)閉警告信息以及@Depreca標(biāo)注的元素不使用兩種注解使用方法,需要的朋友可以參考下
    2019-08-08
  • Java中泛型使用實例詳解

    Java中泛型使用實例詳解

    這篇文章主要介紹了Java中泛型使用實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • java求三個數(shù)的最大值的示例分享

    java求三個數(shù)的最大值的示例分享

    這篇文章主要介紹了java求三個數(shù)的最大值的示例分享,需要的朋友可以參考下
    2014-03-03
  • Spring Boot使用模板freemarker的示例代碼

    Spring Boot使用模板freemarker的示例代碼

    本篇文章主要介紹了Spring Boot使用模板freemarker的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Java實現(xiàn)順序棧原理解析

    Java實現(xiàn)順序棧原理解析

    這篇文章主要介紹了Java實現(xiàn)順序棧原理解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • SpringBoot服務(wù)端數(shù)據(jù)校驗過程詳解

    SpringBoot服務(wù)端數(shù)據(jù)校驗過程詳解

    這篇文章主要介紹了SpringBoot服務(wù)端數(shù)據(jù)校驗過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • Jenkins配置自動發(fā)送郵件過程圖解

    Jenkins配置自動發(fā)送郵件過程圖解

    這篇文章主要介紹了jenkins配置自動發(fā)送郵件過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • 詳解idea maven nexus 常見命令配置

    詳解idea maven nexus 常見命令配置

    這篇文章主要介紹了idea maven nexus 常見命令配置的相關(guān)知識,通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Java排序算法中的快速排序算法實現(xiàn)

    Java排序算法中的快速排序算法實現(xiàn)

    這篇文章主要介紹了Java排序算法中的快速排序算法實現(xiàn),通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對這兩部分數(shù)據(jù)分別進行快速排序,需要的朋友可以參考下
    2023-12-12
  • IDEA?Error:java:無效的源發(fā)行版:13的解決過程

    IDEA?Error:java:無效的源發(fā)行版:13的解決過程

    之前用idea運行時,也會出現(xiàn)這種情況,后面通過網(wǎng)上的資料解決了這個問題,下面這篇文章主要給大家介紹了關(guān)于IDEA?Error:java:無效的源發(fā)行版:13的解決過程,需要的朋友可以參考下
    2023-01-01

最新評論