• 关于java springmvc 接收实体类中的list对象数据的验证操作


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

  • 相关阅读:
    Java 面向对象(七)多态
    Java 面向对象(六)接口
    Java 面向对象(五)抽象
    JavaScript 之 String 对象
    JavaScript 之 基本包装类型
    JavaScript 之 Array 对象
    【LeetCode-数组】三数之和
    【LeetCode-数组】加一
    【LeetCode-数组】搜索插入位置
    【LeetCode-数组】删除排序数组中的重复项
  • 原文地址:https://www.cnblogs.com/ukzq/p/16270085.html
Copyright © 2020-2023  润新知