当前位置:   article > 正文

JSR-303 @Validated实现List集合元素校验_@validated list撖寡情

@validated list撖寡情

问题

在开发过程经常使用JSR-303相关的注解(@Valid,@Validated,@NotBlank…)等来实现对参数的合法性进行校验,在对单个对象进行校验时只需要在对应的VO中添加相关注解便能实现(这里就不演示了)。在前段时间项目中遇到一个服务调用传输数据的问题,仓库每次进行采购时,向采购服务发送的数据是一个List的集合,集合中是每一个采购材料的基本信息(材料名称,数量…),在采购的过程中有些信息是必须要携带过来的(如材料名称,数量),在controller层接收时就需要给List集合中的每一个元素进行合法校验,(不多说上代码)

controller层编写如下
@Validated
@RestController
@RequestMapping("/accept/mes/purchase")
public class PurchaseController extends BaseController {

    private Logger logger = LoggerFactory.getLogger(PurchaseController.class);

    @Autowired
    private PurchaseService purchaseService;

    @PostMapping("/sendPurchase")
    public AjaxResult sendPurchase(@Valid @RequestBody List<PurchaseVO> vos) {
        Map<String, String> result = purchaseService.sendPurchase(vos);
        String code = result.get("code");
        String message = result.get("message");
        if ("0".equals(code) && "Ixbus has received the message successfully".equals(message)){
            return success();
        }else{
            return error();
        }
    }
    
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

这里需要注意的是在类上需要添加@Validated注解,在方法参数前添加@Valid注解

VO层编写
@Validated
public class PurchaseVO implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 采购编码
     * 若不是从采购取得物料编码 ,以PCB开头,年月4位数,后5位流水号
     */
    @NotBlank(message = "采购编码不能为空")
    private String itemId;

    /**
     * 物料名称
     */
    @NotBlank(message = "物料名称不能为空")
    private String itemName;
	
	/**
     * ...还有很多,此处省略
     */
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

注意在类上添加@Validated注解,完成以上步骤后就可以实现List中每个元素都校验了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/310874
推荐阅读
相关标签
  

闽ICP备14008679号