【问题标题】:Why is my projection interface not picked up by Spring Data REST?为什么我的投影接口没有被 Spring Data REST 拾取?
【发布时间】:2015-04-11 18:26:52
【问题描述】:

我正在尝试用 Spring Data REST(版本 2.3.0.RELEASE)用完预测。我阅读了reference documentation,发现这些是我需要的部分:

一个 JPA 实体

@Entity
public class Project implements Serializable {

    @Basic(optional = false)
    @Column(name = "PROJECT_NAME")
    private String projectName;

    // ... lots and lots of other stuff
}

与该实体一起使用的存储库

@Repository
public interface ProjectRepository extends JpaRepository<Project, Long> { }

以及仅检索该实体名称的投影

@Projection(name="names", types={Project.class})
public interface ProjectProjectionNamesOnly  {

  String getProjectName();
}

我希望能够有选择地仅检索项目名称列表,而投影似乎非常适合于此。所以通过这个设置,我到达了http://localhost:9000/projects/1?projection=names 的端点。我取回了所有属性和集合链接,但我希望只取回名称和自我链接。

我还查看了sample project on projections,但该示例是摘录,这似乎与预测不同,因为它是参考的不同部分。我试过了,但还是不行。

所以问题是这样的:你如何使用 spring data rest projections 来检索实体的单个属性(及其自链接)?

【问题讨论】:

  • 你确定投影被发现了吗? API 根目录下的projects 链接是否真的暴露了projection 模板参数?
  • 我认为它没有被发现:在文档中看起来返回的自我链接应该是“localhost:9000/projects/1{?projection}”但我的只是“localhost:9000/projects/1

标签: spring-data spring-data-rest


【解决方案1】:

看起来您的投影定义甚至没有被发现,因此如果您为 HTTP 请求选择它,它不会被应用。

要自动发现投影接口,需要将它们放置在与它们绑定的域类型完全相同的包或子包中。

如果您无法将类型放入该位置,您可以通过调用….projectionConfiguration().addProjection(…)RepositoryRestConfiguration 上手动注册投影定义。

参考文档目前并没有真正提到这一点,但已经有一张票可以在未来的版本中获得this fixed

【讨论】:

  • 我最初将投影与存储库放在同一个包中,将其放在实体包的子包中让它被检测到!拥有更好的文档将是一个很大的帮助,很高兴知道它正在开发中。谢谢!
猜你喜欢
  • 2015-07-25
  • 2017-07-27
  • 2019-04-20
  • 1970-01-01
  • 2019-01-27
  • 2018-04-18
  • 2016-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多