Данные с формы не передаются в контроллер
При заполнении всех данных формы на jsp странице и отправки их, получаю ошибку
Cannot invoke "String.equals(Object)" because the return value of "com.boots.entity.User.getPassword()" is null
В чем может быть проблема?
контроллер
@PostMapping("/registration")
public String addUser(@ModelAttribute("userForm") @Valid User userForm, BindingResult bindingResult, Model model) {
if (bindingResult.hasErrors()) {
return "registration";
}
if (!userForm.getPassword().equals(userForm.getPasswordConfirm())){
model.addAttribute("passwordError", "Пароли не совпадают");
return "registration";
}
if (!userService.saveUser(userForm)){
model.addAttribute("usernameError", "Пользователь с таким именем уже существует");
return "registration";
}
return "redirect:/";
}
registration.jsp
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Регистрация</title>
</head>
<body>
<div>
<%--@elvariable id="userForm" type=""--%>
<form:form method="POST" modelAttribute="userForm">
<h2>Регистрация</h2>
<div>
<form:input type="text" path="username" placeholder="Username"
autofocus="true"></form:input>
<form:errors path="username"></form:errors>
${usernameError}
</div>
<div>
<form:input type="password" path="password" placeholder="Password"></form:input>
</div>
<div>
<form:input type="password" path="passwordConfirm"
placeholder="Confirm your password"></form:input>
<form:errors path="password"></form:errors>
${passwordError}
</div>
<button type="submit">Зарегистрироваться</button>
</form:form>
<a href="/">Главная</a>
</div>
</body>
</html>
User
@Entity
@Table(name = "app_user")
public class User implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Size(min=2, message = "Не меньше 5 знаков")
private String username;
@Size(min=2, message = "Не меньше 5 знаков")
private String password;
@Transient
private String passwordConfirm;
@ManyToMany(fetch = FetchType.EAGER)
private Set<Role> roles;
public User() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Override
public String getUsername() {
return username;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return getRoles();
}
@Override
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPasswordConfirm() {
return passwordConfirm;
}
public void setPasswordConfirm(String passwordConfirm) {
this.passwordConfirm = passwordConfirm;
}
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
введите сюда код
введите сюда код