gpt4 book ai didi

java - 为什么 @Constraints 注释在我的测试中不起作用?

转载 作者:太空宇宙 更新时间:2023-11-04 12:05:15 24 4
gpt4 key购买 nike

我创建了这个User类:

@Entity
public class User extends Model {

@Id
@Constraints.Email
public String email;

@Constraints.MinLength(3)
@Constraints.MaxLength(255)
public String firstName;

@Constraints.MinLength(3)
@Constraints.MaxLength(255)
public String lastName;

@Constraints.MinLength(3)
@Constraints.MaxLength(255)
public String username;

@Constraints.MinLength(16)
@Constraints.MaxLength(255)
public String password;

public static Finder<String, User> finder = new Finder<>(User.class);

public static User create(User user){
user.password = BCrypt.hashpw(user.password, BCrypt.gensalt(12));
user.save();
return user;
}
...
}

我注意到我可以保存一个用户。这意味着,如果没有电子邮件,什么都没有,该用户将保留在我的数据库中。

    @Test
public void createEmptyUser(){
User user = new User();
user.email="";
user.save();

assertTrue(user.email.isEmpty());
assertNotNull(User.finder.byId(user.email));
assertEquals(true, User.findByEmail(user.email).isPresent());
}

为什么我的测试通过了?

最佳答案

正如我在这里看到的 https://github.com/playframework/playframework/blob/master/framework/src/play-java-forms/src/main/java/play/data/validation/Constraints.java如果 EmailValidator 类的参数为空字符串,则其 isValid 方法返回 true:

public static class EmailValidator extends Validator<String> implements ConstraintValidator<Email, String> {

public boolean isValid(String object) {

if(object == null || object.length() == 0) {
return true;
}

return regex.matcher(object).matches();
}
}

考虑将 @Constraints.Required@Formats.NonEmpty 添加到此验证中。此外,您还可以看到 MinLengthMaxLength validator 的行为方式相同。

关于java - 为什么 @Constraints 注释在我的测试中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40436930/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com