【问题标题】:Alternative Annotations to Java Bean Validation Without Using Hibernate不使用 Hibernate 的 Java Bean 验证的替代注释
【发布时间】:2018-01-05 08:43:44
【问题描述】:

我正在做一个项目,我需要对模型的字段设置一些限制/约束(例如,“字符串名称”字段不应超过 10 个字符)。我只能为这项工作找到 Java Bean Validation API。然而,正如我所见,它与 Hibernate 和 Spring Framework 一起使用。

不幸的是,项目中没有使用像 Hibernate 这样的 ORM。我们正在使用 DAO 模式和 JDBI 进行数据库操作。

在 Java 上是否有任何替代注释有助于像 Bean Validation 那样对字段施加约束(并希望像 Lombok 那样使用魔法)?我基本上需要 Size、Min/Max 和 NonNull 注释。

基本上是这样的:

class User {

  @Size(max = 10)
  String name;
}

【问题讨论】:

    标签: java validation model annotations dao


    【解决方案1】:

    karelss 已经回答,你也可以在这里使用javax.validation.constraintsmaven link。这是可能的实现和测试代码(不是完美的)。

    User.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;
                }
    
            }
    

    UserTest.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());
        }
    
    }
    

    【讨论】:

    • 这就是我要找的东西
    • 我使用 javax 验证已经好几年了,但是自 2017 年以来没有任何更新。他们已经分叉到了其他分支吗?
    【解决方案2】:

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

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

    Java 7 Bean validation API

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-24
      • 1970-01-01
      • 2013-08-14
      • 1970-01-01
      相关资源
      最近更新 更多