昨天我跟前端联调发现了一处bug,原因在于有个list列表中的其中一个字段没有传,而我这个参数列表中这个数据虽然做了validation校验,但是整体这个入参是在另一个obj包裹的
如有个商品及数量更新的参数列表如下

@Data
public class GoodsSizeObj{

@校验注解不能为空
private Long goodsId;
@校验注解不能为空
private Integer goodsSize;

}

那么前端在传值的时候是以列表形式进行的传值
这里涉及到一个列表传送数据的问题 如下:
这里我建立了一个新的obj,用于装载这个GoodsSizeObj集合

@Data
public class GsObjListObj{
@校验注解不能为空集合
private List<GoodsSizeObj> gsObjList;
}

接下来的部分是处理这个gsObjList的mvc接口
可能看起来是这样

@ApiOperation(value = "批量添加库存列表")
@PostMapping("/batchAddExcel")
public AjaxResult addStoreListExcel(@ApiParam("库存添加数据") @Validated @RequestBody GsObjListObj listObj) {
return toAjax(storeService.addListExcel(listObj.getGsObjList()));
}

那么存在的问题是什么呢?
1.当传入的每个数据对象GoodsSizeObj中参数有为空的时候,注解的不能为空的注解是不奏效的。
2.不能每个再去判定是否参数有误,毕竟for循环还是比较费资源。

问题

1.当前端连数据json都为空时:
{
"msg": "Required request body is missing: public com.psog.common.core.web.domain.AjaxResult com.psog.purchase.controller.StoreController.addStoreListExcel(com.psog.purchase.bo.in.StoreListCodeInBo)",
"code": 500
}

2.有数据但有的所需值是null,(类比goodsId)
{"storeCodeInBoList":[{"goodsCode":null,"goodsSize":10},{"goodsCode":223,"goodsSize":10}]}
那么这样实际需要代码里先判定goodsCode再执行操作否则返回异常提示

那么经过尝试在GoodsSizeObj上加@Validated也是于事无补的,
要经过业务判定才可以,否则只能嵌套里层逐一判定