0

Can an AutoValue class do a negative check similar to how it checks for Missing required properties? Maybe it can support validation by annotations?

@AutoValue
@JsonSerialize(as = ExampleRequest.class)
@JsonDeserialize(builder = ExampleRequest.Builder.class)
public abstract class ExampleRequest {

  @JsonProperty("name")
  public abstract String name();

  @NegativeCheck // is there something available ?
  @JsonProperty("version")
  public abstract long version();

  public static ExampleRequest.Builder builder() {
    return Builder.builder();
  }

  @AutoValue.Builder
  @JsonIgnoreProperties(ignoreUnknown = true)
  public abstract static class Builder {
    @JsonCreator
    public static ExampleRequest.Builder builder() {
      return new AutoValue_ExampleRequest.Builder();
    }

    @JsonProperty("name")
    public abstract ExampleRequest.Builder name(String name);
    @JsonProperty("version")
    public abstract ExampleRequest.Builder version(long version);

    public abstract ExampleRequest build();
  }
}

I can solve it like below but I was wondering if there is support for some built-in validation using tags so I don't have to write custom validation.

@AutoValue
@JsonSerialize(as = ExampleRequest.class)
@JsonDeserialize(builder = ExampleRequest.Builder.class)
public abstract class ExampleRequest {

  @JsonProperty("name")
  public abstract String name();

  @JsonProperty("version")
  public abstract long version();

  public static ExampleRequest.Builder builder() {
    return Builder.builder();
  }

  @AutoValue.Builder
  @JsonIgnoreProperties(ignoreUnknown = true)
  public abstract static class Builder {
    @JsonCreator
    public static ExampleRequest.Builder builder() {
      return new AutoValue_ExampleRequest.Builder();
    }

    @JsonProperty("name")
    public abstract ExampleRequest.Builder name(String name);
    @JsonProperty("version")
    public abstract ExampleRequest.Builder version(long version);
    
    abstract ExampleRequest autoBuild();

    public ExampleRequest build() {
      ExampleRequest request = autoBuild();
      validateParameterVersion(request.version());
      return request;
    }
    
    private void validateParameterVersion(long version) {
      if (version < 0) {
        throw new IllegalStateException("version cannot be negative");
      }
    }
  }
}
Dharman
  • 30,962
  • 25
  • 85
  • 135
user3654542
  • 76
  • 1
  • 4

0 Answers0