Как игнорировать проверку данных Spring в форме входа? - PullRequest
0 голосов
/ 03 ноября 2018

Я использую Spring MVC для создания веб-приложения.
Моя пользовательская модель

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

Моя регистрация имеет форму ввода для всех этих полей, однако при входе в систему используются только имя пользователя и пароль. Все поля обязательны для заполнения. У меня есть форма входа в систему, чтобы использовать конструктор, который принимает имя пользователя и пароль. При отправке выполняется проверка данных для всех переменных модели пользователя. LoginController:

@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);
    }

Можно ли заставить метод игнорировать все переменные, кроме имени пользователя и пароля?

1 Ответ

0 голосов
/ 04 ноября 2018

Я не думаю, что есть способ, однако, что я могу предложить, это изменить подход.

Создайте новый POJO с именем, например, AuthUser, который будет иметь только имя пользователя и пароль для проверки.

Ваше веб-приложение получит преимущество от "более тонкого" объекта, который будет передаваться в Контроллер, и если он является действительным пользователем, чем использовать этого AuthUser для обращения к базе данных, чтобы получить надлежащего пользователя с помощью запроса.

То, что вы пытаетесь сделать, не является хорошей практикой, потому что вы пытаетесь заполнить модель уже в контроллере. Это должно быть обязанностью базы данных. Я рекомендую вам ознакомиться с шаблоном проектирования DTO, а также может помочь вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...