Привет, у вас есть проблемы с Hibernate и Jackson. У вас есть два POJOHibernate и Jackson (java.lang.IllegalStateException: не удалось вызвать sendError() после того, как ответ был зафиксирован)
@Entity
@Table(name = "USERS")
public class User implements Serializable {
static final long serialVersionUID = 4235637833262722256L;
@Id
@GeneratedValue
private int id;
@Column(name = "CREATION_DATE")
private Date creationDate;
@Column(name = "FIRST_NAME")
private String firstName;
@Column(name = "LAST_NAME")
private String lastName;
@Version
@Column(name = "VERSION")
private int version;
@Column(name = "E_MAIL")
private String email;
@Column(name = "ENABLED")
private boolean enabled;
@Column(name = "LOGIN")
private String login;
@Column(name = "PASSWORD")
private String password;
@JsonManagedReference("role")
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL,fetch = FetchType.EAGER)
private Set<UserRole> userRole;
Пользователь и его роль, которые созданы для интеграции весной безопасности.
@Entity
@Table(name = "USER_ROLES")
public class UserRole {
@Version
@Column(name = "VERSION")
int version;
@Id
@GeneratedValue
private int id;
@JsonBackReference("role")
@ManyToOne()
@JoinColumn(name = "USER_ID", referencedColumnName = "ID")
private User user;
@Column(name = "ROLE")
private String role;
И у вас есть контроллер, который производится от пользователя Json через Jackson. При использовании метода
@RequestMapping(value = "/login", method = RequestMethod.GET, produces = "application/json")
private @ResponseBody User checkLoginAvailability(@RequestParam String login) {
User user = appContext.getUserService().readUserByLogin(login);
if (user != null) {
return user;
}
return new User();
}
Когда этот метод возвращения пользователя без нулевых полей он выдает что:
26-Oct-2014 14:31:17.652 WARNING [http-nio-8080-exec-4]
org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.doResolveException
Handling of [org.springframework.http.converter.HttpMessageNotWritableException]
resulted Exception java.lang.IllegalStateException: Cannot call sendError() after the response has been committed
Вот проблема возникла, когда я добавил @OneToMany (mappedBy = «пользователь», каскад = CascadeType.ALL, принеси = FetchType.EAGER), ранее это было просто fetch = FetchType.EAGER, но я не смог сохранить пользователя с его ролью, в этом случае таблица USER_ROLE была пуста. У меня есть красное решение этой проблемы в бесконечном цикле где-то в Джексоне, добавлена некоторая анотация @JsonBackReference («role») и @JsonManagedReference («role»), но ничего не изменилось. Как я могу решить эту проблему? Спасибо!