我做了一个投影,该投影应该暴露嵌套实体:
@Projection(name = "inlineBusiness", types = { UserModel.class }) public interface InlineBusinessUserModelProjection { String getUsername(); String getFirstName(); String getLastName(); Date getBirthdate(); String getEmail(); BusinessModel getBusiness(); }
和服务存储库:
@RepositoryRestResource(collectionResourceRel = "users", path = "users", excerptProjection = InlineBusinessUserModelProjection.class) public interface UserRepository extends BaseDAO<UserModel> {..}
因为/users它可以正常工作,所以业务领域是使用嵌套实体公开的,但是当我调用时/users/1-什么也没有,所有自定义方法也都没有/users 。
/users
/users/1
那按设计工作。每当UserModel在_embedded子句中使用目标类型的实例(就你而言)时,都会使用摘录投影。因此,摘录是某种在资源未呈现但指向的地方都使用的预览。从集合资源或关联中通常是这种情况。
UserModel
_embedded
从另一个角度来看,默认情况下在项目资源上使用摘录投影实际上没有任何意义:摘录投影是某些域对象上的只读视图。如果默认情况下返回该视图以查看项目资源,客户端将如何知道必须发送哪些数据来更新资源。根据定义,不能简单地提取,修改和使用摘录投影创建的JSON文档来发送PUT请求以更新资源。
PUT
如果要将投影应用于项目资源,请projection使用投影名称填充URI模板变量。
projection
编辑:如果你手动选择它们而无法应用这些投影,请确保已将InlineBusinessUserModelProjection其实际注册为一般用途。确保类型位于的相同包装或子包装中UserModel。或者,通过手动注册投影RepositoryRestConfiguration.projectionConfiguration().addProjection(…)。手动配置使得在@Projection投影类型上的使用已过时。
InlineBusinessUserModelProjection
RepositoryRestConfiguration.projectionConfiguration().addProjection(…)
@Projection