当前位置: 首页> 游戏> 攻略 > SpringBoot之@Validated校验List集合参数类型失效的解决方案

SpringBoot之@Validated校验List集合参数类型失效的解决方案

时间:2025/7/10 8:49:23来源:https://blog.csdn.net/qq_35542689/article/details/141226616 浏览次数:0次

记录一下@Validated校验参数是List集合的时候会失效的解决方案。

方案一(推荐)

定义一个ValidatedList集合,需要参数校验的时候把List改成ValidatedList即可

import lombok.Data;
import javax.validation.Valid;
import java.io.Serializable;
import java.util.*;@Data
public class ValidatedList<E> implements List<E>, Serializable {@Validprivate List<E> list = new LinkedList<>();@Overridepublic int size() {return list.size();}@Overridepublic boolean isEmpty() {return list.isEmpty();}@Overridepublic boolean contains(Object o) {return list.contains(o);}@Overridepublic Iterator<E> iterator() {return list.iterator();}@Overridepublic Object[] toArray() {return list.toArray();}@Overridepublic <T> T[] toArray(T[] a) {return list.toArray(a);}@Overridepublic boolean add(E e) {return list.add(e);}@Overridepublic boolean remove(Object o) {return list.remove(o);}@Overridepublic boolean containsAll(Collection<?> c) {return list.containsAll(c);}@Overridepublic boolean addAll(Collection<? extends E> c) {return list.addAll(c);}@Overridepublic boolean addAll(int index, Collection<? extends E> c) {return list.addAll(index, c);}@Overridepublic boolean removeAll(Collection<?> c) {return list.removeAll(c);}@Overridepublic boolean retainAll(Collection<?> c) {return list.retainAll(c);}@Overridepublic void clear() {list.clear();}@Overridepublic E get(int index) {return list.get(index);}@Overridepublic E set(int index, E element) {return list.set(index, element);}@Overridepublic void add(int index, E element) {list.add(index, element);}@Overridepublic E remove(int index) {return list.remove(index);}@Overridepublic int indexOf(Object o) {return list.indexOf(o);}@Overridepublic int lastIndexOf(Object o) {return list.lastIndexOf(o);}@Overridepublic ListIterator<E> listIterator() {return list.listIterator();}@Overridepublic ListIterator<E> listIterator(int index) {return list.listIterator(index);}@Overridepublic List<E> subList(int fromIndex, int toIndex) {return list.subList(fromIndex, toIndex);}
}

那么集合校验变成如下方式

@PostMapping("saveBatch")
public Result saveBatch(@RequestBody @Validated ValidList<ResultFieldDTO> list) {resultFieldService.saveBatch(list);return Result.ok();
}

方案二

controller上添加@Validated

@RestController
@RequestMapping("search")
@Validated
public class ResultFieldController {
......
}

那么集合校验变成如下方式

@PostMapping("saveBatch")
public Result saveBatch(@RequestBody @Valid List<ResultFieldDTO> list) {resultFieldService.saveBatch(list);return Result.ok();
}

方案三(不推荐)

新增一个实体类,把集合再放到这个实体类当成一个字段

@Data
public class VO{@Validprivate List<SzPicRecord> szPicRecords;}

那么集合校验变成如下方式

 public AjaxResult addBatch(@RequestBody @Validated VO t) {}

总结

推荐使用方案一,另外如果集合中的元素对象字段还是集合,可以使用@Valid注解进行级联校验。

参考引用

SpringBoot关于List集合的校验方式

关键字:SpringBoot之@Validated校验List集合参数类型失效的解决方案

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: