org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException

335
20 ноября 2021, 13:50

Я пытаюсь добавить запись в таблицы но при этом выбивает ошибку

java.lang.NullPointerException
    com.carsales.model.Role.addUser(Role.java:61)
    com.carsales.model.User.addRole(User.java:55)
    com.carsales.controller.UserController.addUser(UserController.java:65)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:498)
    org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:888)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

Мои Entity:

@Entity
@Table(name = "role")
public class Role implements Serializable {

@Id
@Column(name = "idrole", nullable = false,insertable = false,updatable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int idRole;
@Basic
@Column(name = "rolename", nullable = false)
private String roleName;
@OneToMany(mappedBy = "role_user")
private Collection<User> users;
public Collection<User> getUsers() {
    return users;
}
public void setUsers(Collection<User> users) {
    this.users = users;
}
public Role() {
}
public Role(String roleName) {
    this.roleName = roleName;
}
public int getIdRole() {
    return idRole;
}
public void setIdRole(int idRole) {
    this.idRole = idRole;
}
public String getRoleName() {
    return this.roleName;
}
public void setRoleName(String roleName) {
    this.roleName = roleName;
}
public void addUser(User user) {
    this.users.add(user);
}

}

@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "iduser",nullable = false,insertable = false,updatable = false)
private int idUser;
@Basic
@Column(name = "username",nullable = false)
private String userName;
@Basic
@Column(name = "user_surname",nullable = false)
private String userSurName;
@Basic
@Column(name = "email",nullable = false)
private String Email;
@Basic
@Column(name="password",nullable = false)
private String Password;
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "idrole", nullable = false,referencedColumnName = 
"idrole")
private Role role_user;
@ManyToOne(fetch = FetchType.LAZY,cascade = CascadeType.ALL)
@JoinColumn(name = "country_idcountry", nullable = false)
private Country country;
@ManyToOne(fetch = FetchType.EAGER,cascade = CascadeType.ALL)
@JoinColumn(name = "city_idcity",nullable = false,referencedColumnName = 
"idcity")
private City city;

public void addCountry(Country country){
    country.addUser(this);
    this.setCountry(country);
}
public void addCity(City city){
    city.addUser(this);
    this.setCity(city);
}
public void addRole(Role role){
    this.setRole_user(role);
    role.addUser(this);
}
public User() {
}
public User(String userName, String userSurName, String email, String 
password, Role role_user, Country country, City city) {
    this.userName = userName;
    this.userSurName = userSurName;
    Email = email;
    Password = password;
    this.role_user = role_user;
    this.country = country;
    this.city = city;
}
public int getIdUser() {
    return idUser;
}
public void setIdUser(int idUser) {
    this.idUser = idUser;
}
public String getUserName() {
    return userName;
}
public void setUserName(String userName) {
    this.userName = userName;
}
public String getUserSurName() {
    return userSurName;
}
public void setUserSurName(String userSurName) {
    this.userSurName = userSurName;
}
public String getEmail() {
    return Email;
}
public void setEmail(String email) {
    Email = email;
}
public String getPassword() {
    return Password;
}
public void setPassword(String password) {
    Password = password;
}
public Role getRole_user() {
    return role_user;
}
public void setRole_user(Role role_user) {
    this.role_user = role_user ;
}
public Country getCountry() {
    return country;
}
public void setCountry(Country country) {
    this.country = country;
}
public City getCity() {
    return city;
}
public void setCity(City city) {
    this.city = city;
}
public Collection<Bill> getBill() {
    return bill;
}
public void setBill(Collection<Bill> bill) {
    this.bill = bill;
}
@OneToMany(mappedBy = "user")
private Collection<Bill> bill;

}

Контроллер:

@Controller
public class UserController {
@Autowired
private UserDAO userDAO;
@Autowired
private CountryDAO countryDAO;
@Autowired
private CityDAO cityDAO;
@Autowired
private RoleDAO roleDAO;
@GetMapping("/userList")
public String getRoles(Model model){
    model.addAttribute("users",userDAO.getAll());
    return "/userList";
}
@GetMapping("/registration")
public String getAddUser(   Model model){
    model.addAttribute("roleList",roleDAO.getAll());
    model.addAttribute("cityList",cityDAO.getAll());
    model.addAttribute("countryList", countryDAO.getAll());
    model.addAttribute("newUser",new User());
    return "/userAdd";
}
//@PostMapping("/registration")
@RequestMapping(value = "/registration", method = RequestMethod.POST)
public String addUser(@ModelAttribute("newUser") User user,
                      @ModelAttribute("city") City city,
                      @ModelAttribute("country") Country country,
                      @ModelAttribute("role") Role role){

    user.addRole(role);
    user.addCity(city);
    user.addCountry(country);
    userDAO.add(user);

    return "/userList";
}
}

Форма:

<form name = "newUser" class="center" action="/registration" method="post" >
<div>
    <input type="text" name="userName" placeholder="Введіть ім'я:" required>
</div>
<div>
    <input type="text" name="userSurName" placeholder="Введіть ім'я:" required>
</div>
<div>
    <input type="text" name="email" placeholder="Введіть ім'я:" required>
</div>
<div>
    <input type="text" name="password" placeholder="Введіть ім'я:" required>
</div>
<div>
    <select id="roleId" name="roleId">
        <option selected disabled value="">Роль</option>
        <option value=1>admin</option>
        <option value=2>user</option>
    </select>
</div>
<div>
    <select id="cityId" name="cityId">
        <option selected disabled value="">Місто</option>
        <c:forEach var="item" items="${cityList}">
            <option value="${item.idCity}">${item.cityName}</option>
        </c:forEach>
    </select>
</div>
 <div>
    <select id="countryId" name="countryId">
        <option selected disabled value="">Країна</option>
        <c:forEach var="item" items="${countryList}">
            <option value="${item.idCountry}">${item.countryName}</option>
        </c:forEach>
    </select>
</div>
<input type="submit">
</form>
Answer 1

Проблема в строчке:

user.addBill(bill);

И вероятнее всего Null'ом является user (которому неоткуда там взяться), так как в форме вы явно биндите bill:

<@sf.form action="/bill/new" method="post" modelAttribute="bill">
READ ALSO
Не производится запись в файл

Не производится запись в файл

Не создается сам файл и запись в него не производитсяКак можно исправить?

198
Где ошибка, нужна помощь?

Где ошибка, нужна помощь?

Нужно проверить массив на возрастание, убывание, одинаковые поля и поля зигзаги(1,2,-1,3,4)Если код работает отдельными частями правильно, то почему-то...

118
Передача ResultSet в List(Map)

Передача ResultSet в List(Map)

Пишу свой домашний проект паралельно обучениюИспользую JDBC для работы с MySQL

349
maven ошибка при генерации архитипа

maven ошибка при генерации архитипа

Не могу сгенирировать арихтип Ввожу команду

211