昨天我跟前端联调发现了一处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也是于事无补的,
要经过业务判定才可以,否则只能嵌套里层逐一判定