Google AutoValueを広く使用してJavaBeanの規則に従わない値クラスを作成するコードベースがあります。 e。 getFoo()
の代わりに、対応する方法は単にfoo()
と名付けられます。残念ながら、Hibernate Validatorは、JavaBeanのゲッターやクラスプロパティをそのまま検証するため、AutoValueクラスの検証は暗黙的に失敗します。Hibernate ValidatorでJavaBean規則なしでPOJOを検証する
にはどうすれば(すなわちget
、set
、およびis
/has
接頭辞を使用して)JavaBeanの規則に準拠していないPOJOを検証するためにHibernate Validatorをカスタマイズすることができますか?
例:今はできません
HibernateValidatorAutoValueTest.java
import com.google.auto.value.AutoValue;
import org.hibernate.validator.constraints.NotBlank;
import org.junit.Test;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class HibernateValidatorAutoValueTest {
@Test
public void test() {
final ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
final Validator validator = factory.getValidator();
final Bean validBean = Bean.create("Valid", 100);
assertTrue("Valid bean should not have constraint violations", validator.validate(validBean).isEmpty());
final Bean invalidBean = Bean.create("", -1);
assertFalse("Invalid bean should have constraint violations", validator.validate(invalidBean).isEmpty());
}
@AutoValue
public static abstract class Bean {
@NotBlank
public abstract String text();
@NotNull
@Min(42L)
public abstract Integer number();
public static Bean create(String text, Integer number) {
return new AutoValue_HibernateValidatorAutoValueTest_Bean(text, number);
}
}
}
のpom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<prerequisites>
<maven>3.0.1</maven>
</prerequisites>
<groupId>org.example</groupId>
<artifactId>hibernate-validator-auto-value</artifactId>
<version>1.0.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.3.4.Final</version>
</dependency>
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>javax.el</artifactId>
<version>2.2.6</version>
</dependency>
<dependency>
<groupId>com.google.auto.value</groupId>
<artifactId>auto-value</artifactId>
<version>1.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
バマーですが、本当にありがとうございます! – joschi