【发布时间】:2017-06-26 08:43:57
【问题描述】:
我有一个 MongoRepository 的
@RepositoryRestResource(collectionResourceRel = "tools")
public interface ToolRepository extends MongoRepository<Tool, Long>
工具可以是两种实现之一:
public class Screwdriver extends Tool
public class Hammer extends Tool
使用@JsonTypeInfo 映射工具
@JsonTypeInfo(use =
com.fasterxml.jackson.annotation.JsonTypeInfo.Id.CLASS, include =
As.PROPERTY, property = "_class")
public abstract class Tool
当我执行toolRepository.findAll() 时,这将返回一个 JSON 响应:
{
"_embedded" : {
"screwdrivers" : [ {
"name" : "Screwdriver",
...
} ],
"hammers" : [ {
"name" : "Hammer",
...
}
}
预期的反应应该是:
{
"_embedded" : {
"tools" : [ {
"name" : "Screwdriver",
...
},
{
"name" : "Hammer",
...
}
}
collectionResourceRel 对于包含 Json 映射数据的类没有被遵守。
进一步调查; PersistentEntitiesResourceMapping.getMetadataFor()(在 Spring 中)表示确保如果在 ResourceMetadata 缓存中没有这些工具子类的条目,则使用 TypeBasedCollectionResourceMapping,这会导致每个类在 json 响应中都有自己的条目。
有没有办法告诉 Spring data rest 一个特定的子类应该绑定到一个特定的存储库,在这种情况下有没有办法告诉 Spring data rest 螺丝刀是ToolRepository 的一部分,因此应该使用这个仓库的collectionResourceRel?
【问题讨论】:
标签: spring-data-mongodb spring-data-rest