springboot参数校验之校验List集合内的元素

先看源码

控制层

    @ApiOperation(value = "告警触发新增")
    @RequestMapping("/add")
    public CommonResp<?> add(@RequestBody List<AlarmTriggerConfig> list) {
        validateList(list, Insert.class);
        alarmTriggerService.add(list, getLoginUser());
        return CommonResp.success();
    }

实体类

public class AlarmTriggerConfig extends BaseEntity {

    @ApiModelProperty("变量编码")
    @NotBlank(message = "变量编码不能为空",groups = {Insert.class})
    private String varSn;
}    

BaseController 公共方法


import javax.validation.Validator; // 注意是导入这个包

public abstract class BaseController {

    @Resource
    private Validator validator;

    /**
     * 校验List,逐个校验每个元素
     *
     * @param list 校验的参数
     * @param clazz 检验分组 可传多个
     */
    public void validateList(List<?> list, Class<?>... clazz) {
        StringBuilder errorMessage = new StringBuilder("列表校验失败:");

        // 遍历列表,逐个校验每个元素
        for (Object element : list) {
            // 校验元素本身
            Set<ConstraintViolation<Object>> violations = validator.validate(element, clazz);

            // 收集错误信息
            if (!violations.isEmpty()) {
                for (ConstraintViolation<Object> violation : violations) {
                    errorMessage.append(violation.getMessage()).append(" ");
                }
            }
        }

        // 如果有校验错误,抛出异常
        if (errorMessage.length() > "列表校验失败:".length()) {
            throw new IllegalArgumentException(errorMessage.toString());
        }
    }

}

解决历程:

网上好多方法都没解决我的问题,最后想到用这种方法校验,手动调用,循环校验。好歹是解决了

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐