Я пытаюсь создать нового пользователя, используя следующий запрос POST для конечной точки / addNewUser : -
Запрос на публикацию
{
"username" : "abc",
"password" : "123",
"enabled" : "true",
"authorities": [{
"authority" : "ROLE_USER"
}]
}
UserController класс: -
@PostMapping("/addNewUser")
public UserModel addNewUser(@RequestBody UserModel user) {
return userService.addNewUser(user);
}
UserService класс: -
public UserModel addNewUser(UserModel user) {
return userRepository.saveAndFlush(user);
}
UserRepository интерфейс
public interface UserRepository extends JpaRepository<UserModel, String> {
}
Но я получаю следующее исключение: -
2020-04-30 21:14:00.441 ERROR 23653 --- [nio-8080-exec-7] o.h.engine.jdbc.spi.SqlExceptionHelper : ERROR: null value in column "authority" violates not-null constraint
Detail: Failing row contains (null, null).
2020-04-30 21:14:00.450 ERROR 23653 --- [nio-8080-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [authority]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement] with root cause
org.postgresql.util.PSQLException: ERROR: null value in column "authority" violates not-null constraint
Detail: Failing row contains (null, null).
UserModel class
@Entity
@Table(name = "users")
public class UserModel {
@Id
@Column(name = "username", unique = true, nullable = false)
private String username;
@Column(name = "password")
private String password;
@Column(name = "enabled")
private boolean enabled;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
@JsonManagedReference
private List<AuthoritiesModel> authorities;
//getters and setters
}
AuthoritiesModel class: -
@Entity
@Table(name = "authorities")
public class AuthoritiesModel implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@JsonBackReference
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name="username", unique = false, nullable=false)
private UserModel user;
@Id
@Column(name = "authority")
private String authority;
//getters and setters
}
Изначально я подумал, что возникла некоторая проблема с моим пост-запросом или десериализацией с помощью API Джексона, поэтому я распечатал значения полей UserModel в методе контроллера и все значения были установлены правильно, включая AuthoritiesModel. Но когда я пытаюсь сохранить объект UserModel, он выдает исключение.
Обновление 1:
Если я отправляю запрос без полномочий, он не выдает никаких исключений, но В ответ я получаю права доступа как нулевые.
Почтовый запрос
{
"username" : "abc",
"password" : "123",
"enabled" : "true"
}
Почтовый ответ
{
"username": "abc",
"password": "123",
"enabled": true,
"authorities": null
}