Spring 数据 REST - 排除子类型

Spring Data REST - Exclude Subtypes

假设我有以下 Hibernate 实体(省略字段)

@Entity
@DiscriminatorColumn(name = "T")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class SuperClass {
}

@Entity
@DiscriminatorValue(name = "subClassA")
public SubClassA extends SuperClass {
}

@Entity
@DiscriminatorValue(name = "subClassB")
public SubClassB extends SuperClass {
}

使用 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 将对其进行扫描):

@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";
    }

}