JSR303校验之list校验问题

现有需求如下:
新增合同时要保存补贴和费用项信息,由于都是多条,所以用list传参,但不是必传项,不传的时候不校验list中的对象,传的时候就要校验list中对象每个字段都不能为空

也就是要通过JSR303实现

  • 当请求对象中传list,需要校验其中字段不为空
  • 当请求对象中不传list。不做校验

请求对象如下:

@Data
@ApiModel(value = "ContractAddRequest请求", description = "添加合同请求对象")
public class ContractAddRequest {

	......
    
    @ApiModelProperty(value = "补贴集合")
    @JsonProperty("contract_subsidy_add_req_list")
    private List<ContractSubsidyAddRequest> contractSubsidyAddReqList;
    
    @ApiModelProperty(value = "费用项集合")
    @JsonProperty("contract_expenses_add_req_list")
    private List<ContractExpensesAddRequest> contractExpensesAddReqList;
}

补贴对象,补贴对象中继续嵌套了补贴条件对象的list

@Data
public class ContractSubsidyAddRequest {

	......

    @ApiModelProperty(value = "补贴币种(-1前端不显示,0RMB,1USD)")
    @JsonProperty("currency")
    @NotNull(message = "补贴币种" + HibernateConstant.NOT_NULL)
    private Integer currency;

    @ApiModelProperty(value = "返点数额")
    @JsonProperty("rebate_num")
    @NotNull(message = "返点数额" + HibernateConstant.NOT_NULL)
    private BigDecimal rebateNum;

    @Valid
    @ApiModelProperty(value = "补贴条件集合")
    @JsonProperty("subsidy_list")
    private List<ContractSubsidyDetailListRequest> subsidyList;

}

补贴条件对象

@Data
public class ContractSubsidyDetailListRequest {

	.......

    @ApiModelProperty(value = "条件名称(-1前端不显示,0订单量(单位:万),1销售额(单位:万),2客单价(单位:元),3作业费(单位:元))")
    @JsonProperty("condition_name")
    @NotNull(message = "条件名称" + HibernateConstant.NOT_NULL)
    private Integer conditionName;

    @ApiModelProperty(value = "条件数额")
    @JsonProperty("condition_num")
    @NotNull(message = "条件数额" + HibernateConstant.NOT_NULL)
    private BigDecimal conditionNum;

}

controller代码

@ApiOperation("编辑合同保存")
@PostMapping("edit_contract_save")
public CommonResult editContractSave(@Validated @RequestBody ContractAddRequest request){
    return contractService.editContractSave(request);
}

测试:list中的字段校验无效

网上查询了解决方案,只要在请求对象中list属性上加 @Valid注解即可

@Valid
@ApiModelProperty(value = "补贴集合")
@JsonProperty("contract_subsidy_add_req_list")
private List<ContractSubsidyAddRequest> contractSubsidyAddReqList;

1.打开swagger测试,可以校验到list中的字段了

在这里插入图片描述

2.多级list也同样可以校验到

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值