接收參數時存在多對象嵌套,這裏採用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