最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

validate方法中校驗(yàn)工具類

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

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

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

但是,如果在方法Service中如何使用validate方法校驗(yàn)?zāi)?,加注解是不能生效的,因?yàn)樵创a沒有直接這樣處理。

不過,我們可以使用源碼提供的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í)際開發(fā)請(qǐng)仔細(xì)測(cè)試找出合適的解決辦法。

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

相關(guān)文章

  • MyBatis-Plus 快速入門案例(小白教程)

    MyBatis-Plus 快速入門案例(小白教程)

    這篇文章主要介紹了MyBatis-Plus 快速入門案例(小白教程),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Java 進(jìn)階必備之ssm框架全面整合

    Java 進(jìn)階必備之ssm框架全面整合

    SSM框架是spring MVC ,spring和mybatis框架的整合,是標(biāo)準(zhǔn)的MVC模式,將整個(gè)系統(tǒng)劃分為表現(xiàn)層,controller層,service層,DAO層四層,使用spring MVC負(fù)責(zé)請(qǐng)求的轉(zhuǎn)發(fā)和視圖管理,spring實(shí)現(xiàn)業(yè)務(wù)對(duì)象管理,mybatis作為數(shù)據(jù)對(duì)象的持久化引擎
    2021-10-10
  • 值得Java開發(fā)者關(guān)注的7款新工具

    值得Java開發(fā)者關(guān)注的7款新工具

    作為老牌語言Java,其生態(tài)圈也出來了一些有關(guān)云服務(wù)、監(jiān)控、文檔分享方面的工具,這篇文章主要介紹了Java開發(fā)者值得關(guān)注的7款新工具,感興趣的小伙伴們可以參考一下
    2016-07-07
  • 手寫redis@Cacheable注解?參數(shù)java對(duì)象作為key值詳解

    手寫redis@Cacheable注解?參數(shù)java對(duì)象作為key值詳解

    這篇文章主要介紹了手寫redis@Cacheable注解?參數(shù)java對(duì)象作為key值詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java操作Zookeeper原理及過程詳解

    Java操作Zookeeper原理及過程詳解

    這篇文章主要介紹了Java操作Zookeeper原理及過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 創(chuàng)建SpringBoot工程并集成Mybatis的方法

    創(chuàng)建SpringBoot工程并集成Mybatis的方法

    這篇文章主要介紹了創(chuàng)建SpringBoot工程并集成Mybatis,需要的朋友可以參考下
    2018-06-06
  • 關(guān)于Java兩個(gè)浮點(diǎn)型數(shù)字加減乘除的問題

    關(guān)于Java兩個(gè)浮點(diǎn)型數(shù)字加減乘除的問題

    由于浮點(diǎn)數(shù)在計(jì)算機(jī)中是以二進(jìn)制表示的,直接進(jìn)行加減乘除運(yùn)算會(huì)出現(xiàn)精度誤差,想要得到精確結(jié)果,應(yīng)使用BigDecimal類進(jìn)行運(yùn)算
    2024-10-10
  • 解決spring boot網(wǎng)關(guān)gateway導(dǎo)致的坑,無法下載文件問題

    解決spring boot網(wǎng)關(guān)gateway導(dǎo)致的坑,無法下載文件問題

    這篇文章主要介紹了解決spring boot網(wǎng)關(guān)gateway導(dǎo)致的坑,無法下載文件的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • springBoot啟動(dòng)輸出三行日志控制臺(tái)自動(dòng)停止操作

    springBoot啟動(dòng)輸出三行日志控制臺(tái)自動(dòng)停止操作

    這篇文章主要介紹了springBoot啟動(dòng)輸出三行日志控制臺(tái)自動(dòng)停止操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java Socket編程實(shí)現(xiàn)簡(jiǎn)單的問候服務(wù)

    Java Socket編程實(shí)現(xiàn)簡(jiǎn)單的問候服務(wù)

    這篇文章主要為大家介紹了Java Socket編程實(shí)現(xiàn)簡(jiǎn)單的問候服務(wù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-01-01

最新評(píng)論

来宾市| 德安县| 阜新市| 浦江县| 定州市| 积石山| 织金县| 长垣县| 沭阳县| 茂名市| 乡宁县| 芜湖市| 乐平市| 无极县| 绍兴市| 小金县| 区。| 宁阳县| 北安市| 三门县| 民乐县| 木兰县| 克拉玛依市| 嘉定区| 赤水市| 泗水县| 广德县| 沂水县| 菏泽市| 新竹县| 阳江市| 卓尼县| 崇信县| 仪征市| 巴林右旗| 藁城市| 垫江县| 通榆县| 普兰县| 奉贤区| 思南县|