java - 如何忽略登录表单上的Spring数据验证?

标签 java spring spring-mvc

我正在使用 Spring MVC 来制作 web 应用程序。
我的用户模型

public class User {

@NotNull(message="First name cannot be blank")
@Size(min=2, max=30, message="First name must be between 2 and 30 characters")
private String firstName;

@NotNull(message="Last name cannot be blank")
@Size(min=2, max=30, message="Last name must be between 2 and 30 characters")
private String lastName;

@NotNull(message="Email cannot be blank")
@Size(min=10, max=50, message="Email must be between 10 and 50 characters")
private String email;

@NotNull(message="Phone number cannot be blank")
@Size(min=10, max=11, message="Phone number must be between 10 and 11 characters")
private String phoneNum;

@NotNull(message="Username cannot be blank")
@Size(min=3, max=30, message="Username must be between 2 and 30 characters")
private String username;

@NotNull(message="Password cannot be blank")
@Size(min=5, max=50, message="Password must be between 5 and 50 characters")
private String password;


public User(String username, String password)
{
    super();
    this.username = username;
    this.password = password;
}
/**
 * 
 */
public User() {
    super();
}
/**
 * @param firstName
 * @param lastName
 * @param email
 * @param phoneNum
 * @param username
 * @param password
 */
public User(String firstName, String lastName, String email, String phoneNum, String username, String password) {
    super();
    this.firstName = firstName;
    this.lastName = lastName;
    this.email = email;
    this.phoneNum = phoneNum;
    this.username = username;
    this.password = password;
}

我的注册有所有这些字段的表单输入,但是登录仅使用用户名和密码。 该项目需要所有字段。 我将登录表单设置为使用采用用户名和密码的构造函数。提交后,将对所有用户模型变量进行数据验证。 登录 Controller :

@RequestMapping(path="login", method=RequestMethod.GET)
public ModelAndView displayLoginForm()
{
    return new ModelAndView("login", "user", new User("", ""));
}


@RequestMapping(path="loginuser", method=RequestMethod.POST)
public ModelAndView loginUser(@Valid @ModelAttribute("user")User u, BindingResult result)
{
    if(result.hasErrors())
    {
        return new ModelAndView("login", "user", u);
    }

是否可以告诉该方法忽略除用户名和密码之外的所有变量?

最佳答案

我认为没有办法,但是,我可以建议的是改变方法。

创建一个名为 AuthUser 的新 POJO,它仅需要验证用户名和密码。

您的 Web 应用程序将受益于传递给 Controller ​​的“更精简”对象,如果它是有效用户,则使用该 AuthUser 访问数据库以使用查询检索正确的用户。

您尝试做的事情不是一个好的做法,因为您正在尝试填充 Controller 中已有的模型。这应该是数据库的责任。我建议您也看看 DTO 设计模式,它可能会对您有所帮助。

关于java - 如何忽略登录表单上的Spring数据验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53135393/

相关文章:

java - 将 IntelliJ IDEA 调试器附加到远程 java 服务器运行进程

java - Spring 集成流程与常规服务和适配器

java - 如何使用JSP从mysql数据库中读取Blob(图片)数据并显示在浏览器上

java - Android:找不到这样的文件或目录错误?

java - 如何使用信号量进行信号发送?

java - joda ArrayIntList(5000000) 与 int[5000000] 内存消耗

java - 如何将 BigInteger 从 java 传递到 Postgres?

java - 对于 spring 和 hibernate,需要澄清数据源和 session 是如何连接的

java - 无法使 bean 配置工作

java - Tomcat 上的 Spring 3 JMS