Приложение для загрузки Spring: исключение NullPointerException с использованием @ModelAttribute

#java #spring #thymeleaf #modelattribute

#java #весна #thymeleaf #modelattribute

Вопрос:

Я получаю a NullPointerException в этих @ModelAttribute переменных.

Вот мой код:

 @RequestMapping(value="/newUser", method=RequestMethod.POST)
public String newUser(@Validated @ModelAttribute("user") User user, BindingResult userBindingResult, @Validated @ModelAttribute("credentials") Credentials credentials, BindingResult credentialsBindingResult, @Validated @ModelAttribute("contacts") Contacts contacts, BindingResult contactsBindingResult, @Validated @ModelAttribute("address") Address address, BindingResult addressBindingRusult, Model model) {
    
    this.userValidator.validate(user, userBindingResult);
    this.credentialsValidator.validate(credentials, credentialsBindingResult);
    this.contactsValidator.validate(contacts, contactsBindingResult);
    this.addressValidator.validate(address, addressBindingRusult);
    
    if (!userBindingResult.hasErrors() amp;amp; !credentialsBindingResult.hasErrors() amp;amp; !contactsBindingResult.hasErrors() amp;amp; !addressBindingRusult.hasErrors()) {
        
        user.setContacts(contacts);
        user.setAddress(address);
        credentials.setUser(user);
        credentials.setRole(Credentials.DEFAULT_ROLE);
        credentials.setPassword(passwordEncoder.encode(credentials.getPassword()));
        credentials.setEnabled(true); 
        credentialsService.saveCredentials(credentials);
        
        return "redirect:/dashboard?successUser";
        
    } else {
        return "redirect:/dashboard?errorUser";
    }
}
 

Я добавил в модель эти атрибуты в предыдущем методе GET при загрузке страницы и проверил в консоли Chrome, что данные передаются через форму. Вот часть моего кода для метода GET:

 @RequestMapping(value= {"/dashboard"}, method= RequestMethod.GET)
public String loadDashboardPage (Model model) {
    
    /*Users signup*/
    model.addAttribute("user", new User());
    model.addAttribute("credentials", new Credentials());
    model.addAttribute("contacts", new Contacts());
    model.addAttribute("address", new Address());

    return "dashboard";
}
 

Вот ошибка, которую я получил в своей консоли Eclipse:

 java.lang.NullPointerException: null
at com.applicationSample.App.validator.userValidator.validate(UserValidator.java:46) ~[classes/:na]
at com.applicationSample.App.controller.SignupController.newUser(SignupController.java:144) ~[classes/:na]
 

Здесь вы можете найти код для класса Validator:

 @Override
public void validate(Object target, Errors errors) {
    
    User user = (User) target;
    String name = user.getName().trim();
    String surname = user.getSurname().trim();
    
    if (name.isEmpty()) {
        errors.rejectValue("name", "required");
    }

    if (surname.isEmpty()) {
        errors.rejectValue("surname", "required"); 
    }
}
 

Я использую Thymeleaf в своих HTML-файлах для привязки данных. Кроме того, я уже использовал этот подход в аналогичном методе, и он работает нормально. Я не вижу, где может быть ошибка, какая-нибудь помощь?

Комментарии:

1. На основе предоставленного журнала — возникает исключение NullPointerException UserValidator.java в строке 46. Было бы полезно предоставить фактический код этого класса

2. Я понимаю, что вы имеете в виду, но я хочу, чтобы вы помнили, что я уже использовал этот подход в очень похожем методе в том же проекте, и в этом случае он работает. Средство проверки всегда то же самое, что я использовал. Кстати, я собираюсь отредактировать, чтобы добавить фактический код этого класса.