2012-02-24 2 views
0

json 응답을 캡처 한 결과 {page ":"1 ","total ":"2 ","records ":"15 ","rows ": {{"id ": 1, "firstName": "John", "lastName": "Smith", "username": "john", "password": "21232f297a57a5a743894a0e4a801fc3", "role": null}, { "id": 2, "firstName" "Jane", "lastName": "Adams", "username": "jane", "password": "ee11cbb19052e40b07aac0ca060c23ee", "role": null},Jackson 직렬화 중에 자식 객체가 null입니까?

내 사용자 및 역할 클래스는 매우 간단하므로 나는 사소한 것을 간과해야한다고 생각한다.

@Entity(name="user") 
public class User implements Serializable { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    private String firstName; 
    private String lastName; 

    @Column(unique=true) 
    private String username; 
    private String password; 

    @JsonIgnore 
    @OneToMany(mappedBy="user", cascade={CascadeType.PERSIST, CascadeType.MERGE},fetch =FetchType.EAGER) 
    private List<Role> roles = new ArrayList<Role>(); 


    public List<Role> getRoles() { 
     return roles; 
    } 

    public void setRoles(List<Role> roles) { 
     this.roles = roles; 
    } 


    @ManyToOne 
    private Role role; 

    public User() {} 

    public User(String username, String password, String firstName, String lastName, Role role) { 
     this.username = username; 
     this.password = password; 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.role = role; 
    } 

    public User(String username, String firstName, String lastName, Role role) { 
     this.username = username; 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.role = role; 
    } 

    public User(String username) { 
     this.username = username; 
    } 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

    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 Role getRole() { 
     return role; 
    } 

    public void setRole(Role role) { 
     this.role = role; 
    } 
} 

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

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @JsonIgnore 
    @ManyToOne 
    @JoinColumn (name = "user_id", nullable= true) 
    private User user; 
    private Integer role; 

    public Role() {} 

    public Role(Integer role) { 
     this.role = role; 
    } 

    public Long getId() { 
     return id; 
    } 
    public void setId(Long id) { 
     this.id = id; 
    } 
    public User getUser() { 
     return user; 
    } 
    public void setUser(User user) { 
     this.user = user; 
    } 
    public Integer getRole() { 
     return role; 
    } 
    public void setRole(Integer role) { 
     this.role = role; 
    } 
} 

나는 또한

시도

@JsonUnwrapped @ManyToOne 민간 역할의 역할;

하지만이 경우에는 내 json이 전혀 역할을하지 않기 때문에 악화됩니다. { "ID": 1, "firstName을"은 "존", "이 lastName": "스미스", "이름": "존", "비밀번호": "21232f297a57a5a743894a0e4a801fc3를"},

답변

0

나는 물체를 조작했다 복잡한 레거시 관계 요구 사항 (예 : 사용자에게는 역할 및 역할이 있음)으로 인해 응답으로 잘못 전달되기 전에 잘못되었습니다.

@JsonUnwrapped는 하위 개체에 속성이있는 경우에만 unwrap 할 수 있으므로 예상대로 작동합니다.

관련 문제