Java Spring数据REST-排除子类型

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": ""

假设我有以下Hibernate实体(字段未指定)

使用Spring Data REST,我将获得以下JSON表示:

{
  "_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";
    }

}