JAX-RS - JSON属性值中关联对象的toString()

时间:2015-04-23 17:35:17

标签: java json serialization jackson jax-rs

我有这两个Java类

public class Artist {
    @Id
    private Integer id;
    private String name;
    private Short birthYear;
    @JsonIgnore                                                // This is Jackson
    @OneToMany(mappedBy = "artist", fetch = FetchType.EAGER)   // This is JPA
    private List<Album> albums = new ArrayList<Album>();
    . . .
    @Override
    public String toString() {
        return name;
    }
}

public class Album {
    @Id
    private Integer id;
    private String name;
    private Short releaseYear;
    @ManyToOne                                                 // This is JPA
    private Artist artist;
}

现在,我想要的是当我生成Album类的JSON对象时,它会返回如下内容:

{
    id : 2012000587,
    name : 'Escultura',
    releaseYear : '2012',
    artist : 'Guaco'
}

现在输出:

{
    id : 2012000587,
    name : 'Escultura',
    releaseYear : '2012',
    artist : {
        id : 2044452000,
        name : 'Guaco',
        birthYear : 1987
    }
}

我希望不惜一切代价避免使用自定义序列化程序。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

尝试为name属性添加getter,并使用@JsonValue注释对其进行注释。

public class Artist {
    private String name;
    ...
    @JsonValue
    public String getName() { return name; }
}

以下是Jackson Wiki页面的link以供参考。