Mel*_*lih 4 java validation annotations dao model
我正在开发一个项目,需要对模型的字段进行一些限制/约束(例如“字符串名称”字段不应超过 10 个字符)。我只能找到适合这项工作的 Java Bean Validation API。然而,据我所知,它与 Hibernate 和 Spring 框架一起使用。
不幸的是,项目中没有使用像 Hibernate 这样的 ORM。我们使用DAO模式和JDBI进行数据库操作。
Java 上是否有其他注释可以帮助像 Bean Validation 那样对字段施加约束(并且希望像 Lombok 那样与魔法一起工作)?我基本上需要 Size、Min/Max 和 NonNull 注释。
基本上是这样的:
class User {
@Size(max = 10)
String name;
}
Run Code Online (Sandbox Code Playgroud)
Java Bean Validation API 是完成这项工作的正确工具,但正如你所说,它是一个 api,如果你使用应用程序服务器,你将有不同的实现,你可以使用任何你想要的,它不链接到 hibernate 或spring,你看到的是api实现\xc3\xb3n的不同提供者。该 api 适用于对象,您可以用它注释任何对象。
\n\n如果您不想包含依赖项,您可以使用您自己的注释以兼容的方式实现此验证,如下所示
\n\n\nkarelss已经回答了,您也可以在此处使用javax.validation.constraintspackage maven link。这是可能的实现和测试代码(不是完美的)。
用户.java
import javax.validation.constraints.Size;
class User {
@Size(max = 10)
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
用户测试.java
import static org.junit.Assert.assertEquals;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import org.junit.Test;
public class UserTest {
@Test
public void test() {
User user = new User();
// set name over 10
user.setName("12345678912");
// validate the input
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<User>> violations = validator.validate(user);
for (ConstraintViolation v : violations) {
String key = "";
if (v.getPropertyPath() != null) {
key = v.getPropertyPath().toString();
assertEquals("name", key);
assertEquals("size must be between 0 and 10", v.getMessage());
}
}
assertEquals(1, violations.size());
}
}
Run Code Online (Sandbox Code Playgroud)