不使用 Hibernate 的 Java Bean 验证的替代注释

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)

kar*_*lss 5

Java Bean Validation API 是完成这项工作的正确工具,但正如你所说,它是一个 api,如果你使用应用程序服务器,你将有不同的实现,你可以使用任何你想要的,它不链接到 hibernate 或spring,你看到的是api实现\xc3\xb3n的不同提供者。该 api 适用于对象,您可以用它注释任何对象。

\n\n

如果您不想包含依赖项,您可以使用您自己的注释以兼容的方式实现此验证,如下所示

\n\n

Java 7 Bean 验证 API

\n


Ali*_*ice 5

karelss已经回答了,您也可以在此处使用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)