排除 Spring-data-rest 资源的某些字段
我正在尝试将Spring-data-rest与spring-data-mongodb一起使用来公开只读资源。
我遇到的问题是,我想对我的文档有不同的看法。假设我在文档中有一些私人信息,我不想公开它们。
所以我尝试了几种方法。我阅读了这篇文章 https://spring.io/blog/2014/12/02/latest-jackson-integration-improvements-in-spring 描述了如何使用JsonView来选择要公开的字段。
我试过这样:
@RepositoryRestResource(collectionResourceRel = "recommandation", path = "recommandations")
interface RecommandationRepository extends MongoRepository<Recommendation, ObjectId> {
@Override
@JsonView(View.Public.class)
Iterable<Recommendation> findAll(Iterable<ObjectId> objectIds);
... // other find methods
}
它不起作用。然而,在评论中说:https://spring.io/blog/2014/12/02/latest-jackson-integration-improvements-in-spring#comment-1725671983 答案建议使用@Projections但是@Projections导致这样的url:“.../recommandations{?projection}”这意味着投影只是一个选项,所以整个对象仍然暴露出来。
这里描述了另一种方法 https://github.com/spring-projects/spring-data-rest/wiki/Configuring-the-REST-URL-path 它建议对我们不想公开的字段使用@RestResource(导出= false)注释。
但它并不灵活。如果我想公开一个公共只读API和一个私有完全访问API。无法为每个 api 禁用此注释。
还有其他建议吗?