• 关于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也是于事无补的,
    要经过业务判定才可以,否则只能嵌套里层逐一判定

  • 相关阅读:
    css中单位的使用
    css中max-width和min-width的应用
    css-样式初始化
    html中map标签和area标签的应用
    html中常见的小问题(1)
    防止图片被盗用
    关于thinkphp的__construct和_initialize
    禁用cookie后如何使用session还有session_id的使用
    is_null(self::$_instance) && self::$_instance = new self();
    echo、print、print_r、printf、sprintf、var_dump的区别
  • 原文地址:https://www.cnblogs.com/ukzq/p/16270085.html
Copyright © 2020-2023  润新知