Les*_*ova 35 java validation spring hibernate-validator
我有一个验证类:
public class User {
@Size(min=3, max=20, message="User name must be between 3 and 20 characters long")
@Pattern(regexp="^[a-zA-Z0-9]+$", message="User name must be alphanumeric with no spaces")
private String name;
@Size(min=6, max=20, message="Password must be between 6 and 20 characters long")
@Pattern(regexp="^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$", message="Password must contains at least one number")
private String password;
public User(String _name, String _password){
super();
name = _name;
password = _password;
}
public String getName(){
return name;
}
public String getPassword(){
return password;
}
public void setPassword(String newPassword){
password = newPassword;
}
}
Run Code Online (Sandbox Code Playgroud)
当我验证值时,我收到了消息:
SEVERE: Servlet.service() for servlet osAppServlet threw exception
java.lang.NoSuchMethodException: userAuth.User.<init>()
Run Code Online (Sandbox Code Playgroud)
问题出在哪儿?
mic*_*cha 104
该消息java.lang.NoSuchMethodException: userAuth.User.<init>()
表示有人试图在没有任何参数的情况下调用构造函数.添加默认构造函数应该可以解决此问题:
public class User {
public User() {
}
..
}
Run Code Online (Sandbox Code Playgroud)
zov*_*ica 25
如果User类是另一个类的非静态内部类(例如UserAuth),那么如果在实例化外部类之前尝试实例化User类,则可能出现该消息.在这种情况下,null-arg构造函数可能在代码中但不会被找到,因为外部类尚不存在.解决方案可以是将内部类提取到一个独立的类中,使其成为静态的,或者确保外部类的初始化发生在内部类的初始化之前.
ser*_*.vi 13
添加没有参数的构造函数:
public class User {
...
public User() {}
...
}
Run Code Online (Sandbox Code Playgroud)
我认为添加默认的无参数构造函数的答案是明确的。然而,我们还必须考虑后一个构造函数的可见性。前面的答案显示了公共无参数默认构造函数的使用。公众的可见性与班级的逻辑相关吗?
事实上,Hibernate 不需要公共的无参数构造函数。人们仍然可以选择其可见性。
因此,我建议格外注意构造函数的可见性(私有/公共/受保护/默认)。选择合适的。例如,如果没有人应该能够调用这个无参数构造函数,请选择一个私有可见性,如下所示:
public class User {
...
private User() {}
...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
63086 次 |
最近记录: |