AutoValue类能否实现类似必填项检查的负值校验,是否支持注解校验?
结论
原生AutoValue本身不提供内置的注解式负值/自定义规则校验能力,仅自带必填引用类型的非空检查。你目前自定义build方法校验的实现是官方推荐的标准做法,如果你不想逐个编写校验逻辑,可以和Java Bean Validation规范整合,实现标签式校验。
整合Bean Validation实现注解式校验的方案
你只需要引入Bean Validation的实现(比如Hibernate Validator),就可以用标准注解标注校验规则,不需要逐个写字段的校验方法:
- 给属性加校验注解
@AutoValue @JsonSerialize(as = ExampleRequest.class) @JsonDeserialize(builder = ExampleRequest.Builder.class) public abstract class ExampleRequest { @JsonProperty("name") @NotBlank // 非空非空白校验 public abstract String name(); @JsonProperty("version") @Min(0) // 最小值为0,禁止负值 public abstract long version(); // 省略其余原有代码
- 在Builder的build方法里统一执行校验,不需要每个字段写单独的校验逻辑:
public ExampleRequest build() { ExampleRequest request = autoBuild(); // 全局Validator实例建议抽成静态常量,不要每次build都创建 ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); Validator validator = factory.getValidator(); Set<ConstraintViolation<ExampleRequest>> violations = validator.validate(request); if (!violations.isEmpty()) { throw new IllegalArgumentException("参数校验失败:" + violations); } return request; }
这种方式后续新增字段只需要加对应校验注解即可,不需要修改build方法的逻辑。
补充说明
- 如果你用的是Android环境,可以用适配Android的Bean Validation实现,用法一致。
- 原生AutoValue没有计划内置这类业务校验能力,官方推荐要么自定义build校验,要么整合第三方校验框架。
内容的提问来源于stack exchange,提问作者user3654542
相关产品推荐
相关产品推荐

