Hallo Ich habe ein Problem mit dem Jacksons Deserializer.Jackson Sammlung Serializer Fehler trotz @JsonIgnore
Ich habe zwei Spring-Boot-Anwendungen und ein separates Modul für das gemeinsame Modell.
app1-> <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>eu.emif.security</groupId>
<artifactId>model</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
app2-> <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>eu.emif.security</groupId>
<artifactId>model</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
model-> <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.0</version>
</dependency>
im Modell ich ein Benutzer- und Rollen bezwecken
package eu.emif.security.model;
import org.codehaus.jackson.annotate.JsonAutoDetect;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.annotate.JsonMethod;
import org.codehaus.jackson.annotate.JsonProperty;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@Entity
@Table(name = "user", schema = "public")
@JsonAutoDetect(value = JsonMethod.NONE)
public class User implements Serializable, UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@JsonProperty
private Long id;
@NotNull
@JsonProperty
private String username;
@NotNull
private String password;
@ManyToMany(fetch = FetchType.EAGER,mappedBy = "users")
@JsonIgnore
private List<Role> roles;
public User() { }
@JsonIgnore
public Collection<? extends GrantedAuthority> getAuthorities() {
ArrayList<GrantedAuthority> grantedAuthorities = new ArrayList<GrantedAuthority>();
for (Role role : roles) {
grantedAuthorities.add(new SimpleGrantedAuthority(role.getRoleName()));
}
return grantedAuthorities;
}
public boolean isAccountNonExpired() {
return true;
}
public boolean isAccountNonLocked() {
return true;
}
public boolean isCredentialsNonExpired() {
return true;
}
public boolean isEnabled() {
return true;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public List<Role> getRoles() {
return roles;
}
public void setRoles(List<Role> roles) {
this.roles = roles;
}
public Long getId() {
return id;
}
}
import org.codehaus.jackson.annotate.JsonAutoDetect;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.annotate.JsonMethod;
import org.codehaus.jackson.annotate.JsonProperty;
import javax.persistence.*;
import java.io.Serializable;
import java.util.List;
@Entity
@Table(name = "role", schema = "public")
@JsonAutoDetect(value = JsonMethod.NONE)
public class Role implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@JsonProperty
private Long id;
@ManyToMany
@JoinTable(name="user_roles", [email protected](name="role_id"), [email protected](name="user_id"))
@JsonIgnore
private List<User> users;
public Role() {
}
@JsonProperty
private String roleName;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
}
Das Problem ist, dass, wenn ich meine Anwendung ausführen ich einen Stapelüberlauf Ausnahme erhalten, weil, wenn das Objekt Benutzer serialisiert wird jackson dann versucht, Serialisieren Sie die Rollen, die wiederum Benutzer und Endlosschleifen haben.
Ich glaube, die @JsonIgnore Anmerkung (kein Wortspiel beabsichtigt)
Hat jemand von euch eine Idee haben, ignoriert wird, warum diese auftreten wird?
Ist eine Art, Jackson im Frühjahr Boot zu sagen, wo es nach Klassen suchen muss, die mit Jacksons Anmerkungen kommentiert sind. Ich glaube, dass der Mapper in app1 einfach keine Ahnung hat, dass es Klassen im separaten Modul sind, die kommentiert sind. Mit freundlichen Grüßen
danke dir, dass gearbeitet: Könnten Sie bitte die folgenden versuchen. Die Lösung war zweifach. Ich musste meine Spring-Boot-Konfiguration zu Entity und Komponente mein anderes Modul scannen und dann die Abhängigkeit zu Fasterxml anstelle von Codehaus ändern. Danke –