Java Spring数据REST-排除子类型
假设我有以下Hibernate实体(字段未指定) 使用Spring Data REST,我将获得以下JSON表示:Java Spring数据REST-排除子类型,java,spring,hibernate,spring-data-rest,Java,Spring,Hibernate,Spring Data Rest,假设我有以下Hibernate实体(字段未指定) 使用Spring Data REST,我将获得以下JSON表示: { "_links": { }, "_embedded": { "subclassA": [ { "field1": "", "field2": "" } ], "subclassB": [ { "field1": "", "field2": ""
{
"_links": {
},
"_embedded": {
"subclassA": [
{
"field1": "",
"field2": ""
}
],
"subclassB": [
{
"field1": "",
"field2": "",
"field3": ""
}
]
}
}
再次输入_links属性。我是否可以使用某种配置,以便序列化程序可以忽略子类并执行如下表示:
{
"_links": {
},
"_embedded": {
"superClass": [
{
"field1": "",
"field2": ""
},
{
"field1": "",
"field2": "",
"field3": ""
}
]
}
}
解决此问题的一种方法是实现
RelProvider
。您所需要做的就是实现它并将其添加到spring容器中(可以这样做,但也就是用@Component注释实现)
考虑到您只需添加以下实现即可获得预期的响应(考虑到spring将对其进行扫描):
@组件
公共类MessageRelProvider实现RelProvider{
公共布尔支持(类arg0){
返回超类.class.isAssignableFrom(arg0);
}
公共字符串getItemResourceRelFor(类类型){
返回“超类”;
}
公共字符串getCollectionResourceRelFor(类类型){
返回“超类”;
}
}
问得好,但我们还行field3
是超类的成员吗?否则可能会很奇怪,而且你可以在SDR上找到关于这个主题的公开问题Jira:field3只是子类B的一个成员
{
"_links": {
},
"_embedded": {
"superClass": [
{
"field1": "",
"field2": ""
},
{
"field1": "",
"field2": "",
"field3": ""
}
]
}
}
@Component
public class MessageRelProvider implements RelProvider {
public boolean supports(Class<?> arg0) {
return SuperClass.class.isAssignableFrom(arg0);
}
public String getItemResourceRelFor(Class<?> type) {
return "superClass";
}
public String getCollectionResourceRelFor(Class<?> type) {
return "superClasses";
}
}