为什么我的投影界面没有被Spring Data REST选中?

Jay*_*Jay 2 spring-data spring-data-rest

我试图使用Spring Data REST(版本2.3.0.RELEASE)进行预测.我阅读了参考文档,并收集了这些是我需要的部分:

JPA实体

@Entity
public class Project implements Serializable {

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

    // ... lots and lots of other stuff
}
Run Code Online (Sandbox Code Playgroud)

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

@Repository
public interface ProjectRepository extends JpaRepository<Project, Long> { }
Run Code Online (Sandbox Code Playgroud)

并且投影只检索该实体的名称

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

  String getProjectName();
}
Run Code Online (Sandbox Code Playgroud)

我希望能够选择只检索一个项目名称列表,并且投影看起来非常适合这一点.因此,通过此设置,我在http:// localhost:9000/projects/1?projection = names上点击我的端点.我找回所有属性和集合链接,但我希望只返回名称和自我链接.

我还看了关于投影示例项目,但示例是摘录,它似乎与投影不同,因为它是参考的不同部分.我尝试了它,但它无论如何都没有用.

所以问题是:如何使用spring数据休息投影来检索实体的单个属性(及其自身链接)?

Oli*_*ohm 11

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

对于要自动发现的投影接口,需要将它们放在它们所绑定的域类型的包的相同或子包内.

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

目前参考文档并没有真正提到这一点,但已经有了一张在未来版本中修复此问题的机票.