【参数校验框架】单个对象以List⽅法⼊参的校验⽅法
⽂章⽬录
⼀、场景描述
在⽇常的开发过程中,我们对单个数据模型进⾏属性参数校验的过程中,可以采⽤ @Valid 和 @Validated 注解在控制层进⾏数据绑定时的校验
但是在某个单个数据模型需要采⽤ List<Goods> 这种⽅式⼊参的时候,@Valid 和 @Validated 注解就不能发挥出校验的作⽤了
⼆、校验场景
验证传⼊的 List<Goods> 列表的每个属性的合规性
三、校验⽅案
1. ⾃定义列表实体 Bean 请求校验通⽤封装类
@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){
ains(o);
}
@Override
@NonNull
工作开展情况报告
public Iterator<E>iterator(){
return list.iterator();丙丁
}
@Override
@NonNull
public Object[]toArray(){
Array();
}
@Override
@NonNull
public<T> T[]toArray(@NonNull T[] a){
public boolean add(E e){
return list.add(e);
}
@Override
public boolean remove(Object o){
ve(o);
}
@Override
public boolean containsAll(@NonNull Collection<?> c){
ainsAll(c);
}
@Override
public boolean addAll(@NonNull Collection<?extends E> c){
return list.addAll(c);
}
@Override
public boolean addAll(int index,@NonNull Collection<?extends E> c){ return list.addAll(index,c);
}
@Override
public boolean removeAll(@NonNull Collection<?> c){
veAll(c);
}
@Override
public boolean retainAll(@NonNull Collection<?> c){
ainAll(c);
}
@Override
public void clear(){
饮鸠止渴list.clear();
}
@Override
public E get(int index){
(index);
}
什么是单循环赛
@Override
public E t(int index, E element){
return list.t(index, element);
}
@Override
public void add(int index, E element){
猴子用英语怎么说
list.add(index, element);
}
@Override
public E remove(int index){
ve(index);
}
@Override
public int indexOf(Object o){
public int lastIndexOf(Object o){
return list.lastIndexOf(o);钝角三角形的高怎么画
}
@Override
@NonNull
public ListIterator<E>listIterator(){
return list.listIterator();
}
@Override
@NonNull
public ListIterator<E>listIterator(int index){
return list.listIterator(index);
画蛋
}
@Override
@NonNull
public List<E>subList(int fromIndex,int toIndex){
return list.subList(fromIndex, toIndex);
}
}
2. 创建演⽰实体
@Data
@ToString
public class Goods implements Serializable {
private static final long rialVersionUID =67493246372918L;
/** ⾃增ID*/
private String id;
/** 商品ID*/
@NotNull(message ="商品ID不能为空")
想知道英文private String goodsId;
/** 商品名称*/
@NotNull(message ="商品名称不能为空")
private String goodName;
}
3. 创建演⽰控制器
@PostMapping("/list/goods")
@ApiOperation(value ="查询商品列表", notes ="模拟通过传⼊商品关键字列表查询商品列表") public DataResult goodsList(@RequestBody@Validated ValidList<Goods> goodsList){ log.info("the request is {}", String());
return DataResult.success();
}
4. 模拟请求参数
[
{
"goodName":"string",
"id":"string"
},{
"goodsId":"string",
"id":"string"
5. 校验响应结果
{
"code":10009,
"msg":"商品ID不能为空;商品名称不能为空;",
"detail":null,
"data":null
}
P.S
以上 Controller 通过项⽬中定义 @RestControllerAdvice 来进⾏异常统⼀处理,所以看到的响应结果是封装过的