validation list嵌套對象校驗

接收參數時存在多對象嵌套,這裏採用validation校驗

1、 校驗實體類

/**
 * @ Author :L&C
 * @ Date : 2019/12/27 15:08
 * @ Description :模板接收對象
 */
@Data
public class TemplateVO implements Serializable {
    /**
     * 主鍵id
     */
    private Integer id;
    /**
     * 模板id
     */
    private Integer tabId;

    @NotNull(message = "線路ID不能爲空")
    private Integer lineId;
    /**
     * 標題
     */
    private String title;

    /**
     * 標題排序號
     */
    private Integer titleSortNumber;
    /**
     * 具體模板內容,裏面再加@NotNull、 @NotBlank、@Range、 @Lengt 
     * 組成一個嵌套校驗實例
     */
    @Valid
    private List<TemplateContentVO> contents;

    public TemplateVO() {
    }
}

2、校驗list

/**
 * @Auther: l&c
 * @Description: 校驗list
 * @Date: 2019/12/27 16:02
 * @Description:
 */
@Data
public class ValidList<E> implements List<E> {

    @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);
    }
}

3、校驗

   public String getValidation(BindingResult result){
        StringBuffer stringBuffer = new StringBuffer();
        if(result.hasFieldErrors()){
            List<FieldError> errorList = result.getFieldErrors();
            boolean flag = false;
            for (FieldError item : errorList) {
                if(flag){
                    stringBuffer.append(",");
                }else {
                    flag = true;
                }
                stringBuffer.append(item.getField()+":"+item.getDefaultMessage());
            }
        }
        return stringBuffer.toString();
    }

4、Controller開始校驗

 /**
     * 新增編輯模板
     * @param vos
     * @param result
     * @param request
     * @return
     */
    @PostMapping(value = "/template")
    public Object updateTemplate(@Valid @RequestBody ValidList<TemplateVO> vos, BindingResult result, HttpServletRequest request){
        if (result.hasErrors()){
            return R.error(SystemErrorEnum.NOT_FOUND.getCode(),getValidation(result));
        }
        Integer userId = getCurrentUserId(request);
        return R.success(templateService.updateTemplate(vos,userId));
    }

5、常用校驗註解


@Null 只能是null
@NotNull 不能爲null 注意用在基本類型上無效,基本類型有默認初始值
@AssertFalse 必須爲false
@AssertTrue 必須是true

字符串/數組/集合檢查:(字符串本身就是個數組)
@Pattern(regexp="reg") 驗證字符串滿足正則
@Size(max, min) 驗證字符串、數組、集合長度範圍
@NotEmpty 驗證字符串不爲空或者null
@NotBlank 驗證字符串不爲null或者trim()後不爲空

數值檢查:同時能驗證一個字符串是否是滿足限制的數字的字符串
@Max 規定值得上限int
@Min 規定值得下限
@DecimalMax("10.8") 以傳入字符串構建一個BigDecimal,規定值要小於這個值 
@DecimalMin 可以用來限制浮點數大小
@Digits(int1, int2) 限制一個小數,整數精度小於int1;小數部分精度小於int2
@Digits 無參數,驗證字符串是否合法
@Range(min=long1,max=long2) 檢查數字是否在範圍之間
這些都包括邊界值

日期檢查:Date/Calendar
@Post 限定一個日期,日期必須是過去的日期
@Future 限定一個日期,日期必須是未來的日期

其他驗證:
@Vaild 遞歸驗證,用於對象、數組和集合,會對對象的元素、數組的元素進行一一校驗
@Email 用於驗證一個字符串是否是一個合法的右鍵地址,空字符串或null算驗證通過
@URL(protocol=,host=,port=,regexp=,flags=) 用於校驗一個字符串是否是合法UR

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章