JavaSpring数据Rest如何更改抽象类集合的JSON序列化
我使用SpringBootV1。2.5和具有以下单表继承实体:
@Entity
@table(name="view_items")
@DiscriminatorColumn(name="type")
public abstract class ViewItem {
private int position;
}
@Entity
@DiscriminatorValue(value="table")
public class Table extends ViewItem {}
@Entity
@DiscriminatorValue(value="chart")
public class Chart extends ViewItem {}
public interface ViewItemRepository
extends JpaRepository<ViewItem, Integer>{}
以及以下协会:
@Entity
@Table(name="views")
public class View {
@OneToMany
@JoinColumn(name="view_id")
@OrderBy("position")
private List<ViewItem> viewItems = new ArrayList<ViewItem>();
...
}
调用GET /views/{id}/viewItems
返回按子类类型排序的集合(为了可读性,某些部分已被删除):
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Wed, 23 Sep 2015 07:41:13 GMT
{
"_embedded" : {
"tables" : [ {
"position": 4,
...
"_links" : {
"self" : {
"href" : "http://localhost:8080/viewItems/3"
}
}
} ],
"charts" : [ {
"position": 2,
...
"_links" : {
"self" : {
"href" : "http://localhost:8080/viewItems/2"
}
}
} ]
}
有没有一种简单的方法来更改JSON序列化,即按如下位置排序view_items
:
{
"_embedded" : {
"2": {
"type": "chart",
...
"_links" : {
"self" : {
"href" : "http://localhost:8080/viewItems/2"
}
},
"4": {
type: "table",
...
"_links" : {
"self" : {
"href" : "http://localhost:8080/viewItems/3"
}
}
# 1 楼答案
所以我找到了答案
将
View
实体的ViewItems
集合映射类型从List
替换为Map
,并在ViewItem
实体上添加一个只读type
字段,这样做的技巧是:编辑
几个月后,多亏@aux(参见here),这里有了解决方案。必须实现RelProvider类,如here所述