Дочерний объект является нулевым во время сериализации Джексона? - PullRequest
0 голосов
/ 24 февраля 2012

Я захватил ответ json и вижу, что это {"page": "1", "total": "2", "records": "15", "rows": [{"id": 1 "ПгвЬЫате": "Джон", "LastName": "Смит", "имя пользователя": "Джон", "пароль": "21232f297a57a5a743894a0e4a801fc3", "роль": нулевой}, { "ID": 2, "Имя" : "Джейн", "LastName": "Адамс", "имя пользователя": "джейн", "пароль": "ee11cbb19052e40b07aac0ca060c23ee", "роль": нулевая},

Мои классы User и Role очень просты, поэтому я думаю, что должен упускать из виду что-то тривиальное.

@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, "Имя": "Джон", "LastName": "Смит", "имя пользователя": "Джон", "пароль": "21232f297a57a5a743894a0e4a801fc3"},

1 Ответ

0 голосов
/ 24 февраля 2012

Я неправильно манипулировал объектом, прежде чем передать его обратно в качестве ответа из-за сложного унаследованного требования отношения, т. Е. У пользователя есть роль и роли.

@ JsonUnwrapped может разворачиваться, только если в дочернем объекте есть свойства, поэтому он работает должным образом.

...