国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

文件導(dǎo)入之Validation校驗List對象數(shù)組

這篇具有很好參考價值的文章主要介紹了文件導(dǎo)入之Validation校驗List對象數(shù)組。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

背景:

  • 我們的接口是一個List對象,對象里面的數(shù)據(jù)基本都有一些基礎(chǔ)數(shù)據(jù)校驗的注解,我們怎么樣才能校驗這些基礎(chǔ)規(guī)則呢?

  • 我們在導(dǎo)入excel文件進行數(shù)據(jù)錄入的時候,數(shù)據(jù)錄入也有基礎(chǔ)的校驗規(guī)則,這個時候我們又該如何少寫代碼讓Validation框架來幫我們完成這些基礎(chǔ)校驗?zāi)兀?/p>

帶著這個疑問,喊一句:翠花,上酸菜。

正文

首先定義我們的Validation的基礎(chǔ)類,基礎(chǔ)類只有一個字段:errMsg,用于我們校驗不通過時候存儲我們的提示信息:

@Data
public class ValidationBaseDTO {
    private String errMsg;
}

然后定義我們的測試對象類,搞一個簡單的,這個DTO集成我們的校驗基礎(chǔ)類

@Data
public class ValidationTestDTO extends ValidationBaseDTO {

    @NotEmpty(message = "用戶名不允許為空!")
    private String userName;

    @NotEmpty(message = "用戶code不允許為空")
    private String userCode;

    private int age;

}

然后編寫咱們的校驗工具類:

public class ValidationUtils{
    public static <E, T extends ValidationBaseDTO> List<T> validate(Validator validator, E e) {
        return validate(validator, e, Default.class);
    }

    public static <E, T extends ValidationBaseDTO> List<T> validate(Validator validator, E e, Class<?> groupClass) {
        Set<ConstraintViolation<E>> set = validator.validate(e, groupClass);
        if (CollectionUtils.isEmpty(set)) {
            return null;
        }
        Map<String, List<ConstraintViolation<E>>> resultGroup = set.stream().collect(Collectors.groupingBy(item -> item.getPropertyPath().toString().substring(0, item.getPropertyPath().toString().indexOf("."))));

        return resultGroup.entrySet().stream().map(item -> {
            T targetObject = (T)item.getValue().get(0).getLeafBean();
            String errMsg = String.join("|", item.getValue().stream().map(ConstraintViolation<E>::getMessage).collect(Collectors.toList()));
            targetObject.setErrMsg(errMsg);
            return targetObject;
        }).collect(Collectors.toList());
    }

}

校驗工具類有了,那還得搞一個測試用的Controller

 
@Slf4j
@RestController
@RequestMapping(value = "validation")
@AllArgsConstructor
public class ValidationTestController {

    private final Validator validator;

    @RequestMapping(value = "validationTest")
    public CommonResult<List<ValidationTestDTO>> validationTest() {
        // 例如我們通過Excel導(dǎo)入的數(shù)據(jù)有兩條,屬性全為空
        ValidationTestDTO validationTestDTO1 = new ValidationTestDTO();
        ValidationTestDTO validationTestDTO2 = new ValidationTestDTO();
        List<ValidationTestDTO> validationTestDTOList = new ArrayList<>();
        validationTestDTOList.add(validationTestDTO1);
        validationTestDTOList.add(validationTestDTO2);

        // 校驗結(jié)果如果為空,則說明全部通過,如果不為空,則說明有的校驗沒有通過
        List<ValidationTestDTO> resultList = ValidationUtils.validate(validator, new ValidatedList<>(validationTestDTOList));
        return ResultUtil.success(resultList);
    }
}

這里不得不提的就是,Validator 在Spring框架里面是有被實例化的,且由Sping框架管理,我們直接注入就可以了

差點忘了,如果需要校驗List,我們還需要自定義一個ValidationList類,如下:

public class ValidatedList<E> implements List<E>, Serializable {

    public ValidatedList(List<E> eList){
        this.list = eList;
    }
    @Valid
    private List<E> list = new LinkedList<>();

    @Override
    public int size() {
        return list.size();
    }

    @Override
    public boolean isEmpty() {
        return list.isEmpty();
    }

    @Override
    public boolean contains(Object o) {
        return list.contains(o);
    }

    @Override
    public Iterator<E> iterator() {
        return list.iterator();
    }

    @Override
    public Object[] toArray() {
        return list.toArray();
    }

    @Override
    public <T> T[] toArray(T[] a) {
        return list.toArray(a);
    }

    @Override
    public boolean add(E e) {
        return list.add(e);
    }

    @Override
    public boolean remove(Object o) {
        return list.remove(o);
    }

    @Override
    public boolean containsAll(Collection<?> c) {
        return list.containsAll(c);
    }

    @Override
    public boolean addAll(Collection<? extends E> c) {
        return list.addAll(c);
    }

    @Override
    public boolean addAll(int index, Collection<? extends E> c) {
        return list.addAll(index, c);
    }

    @Override
    public boolean removeAll(Collection<?> c) {
        return list.removeAll(c);
    }

    @Override
    public boolean retainAll(Collection<?> c) {
        return list.retainAll(c);
    }

    @Override
    public void clear() {
        list.clear();
    }

    @Override
    public E get(int index) {
        return list.get(index);
    }

    @Override
    public E set(int index, E element) {
        return list.set(index, element);
    }

    @Override
    public void add(int index, E element) {
        list.add(index, element);
    }

    @Override
    public E remove(int index) {
        return list.remove(index);
    }

    @Override
    public int indexOf(Object o) {
        return list.indexOf(o);
    }

    @Override
    public int lastIndexOf(Object o) {
        return list.lastIndexOf(o);
    }

    @Override
    public ListIterator<E> listIterator() {
        return list.listIterator();
    }

    @Override
    public ListIterator<E> listIterator(int index) {
        return list.listIterator(index);
    }

    @Override
    public List<E> subList(int fromIndex, int toIndex) {
        return list.subList(fromIndex, toIndex);
    }
}

如果這個類不定義,直接傳入我們請求參數(shù)的List,那是無效的;

啟動,看效果:

文件導(dǎo)入之Validation校驗List對象數(shù)組,list,windows,microsoft

添加圖片注釋,不超過 140 字(可選)文章來源地址http://www.zghlxwxcb.cn/news/detail-705216.html

到了這里,關(guān)于文件導(dǎo)入之Validation校驗List對象數(shù)組的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包