0
嗨我有一個傑克遜解串器問題。傑克遜收集串行器錯誤儘管@JsonIgnore
我有兩個spring引導應用程序和一個單獨的模塊用於共享模型。
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>
在模型中我有一個用戶和角色對象
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;
}
}
的問題是,當我運行我的應用程序,我得到一個堆棧溢出異常,因爲當用戶對象序列化傑克遜然後嘗試序列化具有用戶和無限循環的角色。
我相信@JsonIgnore註釋被忽略(沒有雙關語意)
是否有人對你有一個想法,爲什麼這是發生?
是他們在春季啓動需要的地方尋找這些註釋至極傑克遜註釋班告訴傑克遜的一種方式。我相信app1中的映射器根本不知道它們是在單獨模塊中註釋的類。 親切的問候
謝謝你的工作。解決方案是兩倍。我必須告訴我的Spring啓動配置實體和組件掃描我的其他模塊,然後將依賴關係更改爲fasterxml而不是codehause。謝謝 –