我正在尝试使用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{?projections}”这意味着投影只是一个选项,所以整个对象仍然是公开的。
这里描述了另一种方法https://github.com/spring-projects/spring-data-rest/wiki/configuring-the-rest-url-path建议对我们不想公开的字段使用@restresource(export=false)注释。
但不灵活。如果我想公开一个公共只读API和一个私有完全访问API。不能对每个API禁用此批注。
还有别的建议吗?
重要的一点是Spring Data REST基于域对象使用Jackson序列化参数,而不是存储库定义。隐藏特定字段以避免出现在JSON中的一种简单方法如下所示:
@Entity
public class User {
@Id @GeneratedValue
private Long id;
private String name;
@JsonIgnore
private String password;
...
在本例中,无论如何使用此实体,我的用户对象都永远不会导出密码字段。Jackson支持将此放入字段,或者放入相应的getter方法。
当您在域模型中放置@JSONIGNORE时,它使它成为默认定义。投影是改变呈现的字段的选项。看下面的例子:
@Projection(name = "noImages", types = {Item.class})
public interface NoImages {
public Link getHtmlUrl();
}
我意识到参考文件在所有这些细节上并不是很及时。您可以跟踪我们的进度以适当地更新文档,如下所示:
还有一个bug,来自Spring Data REST的ALPS元数据还需要过滤掉带有@jsonIgnore标记的域字段(请参见https://jira.Spring.io/browse/datarest-463)
我正在我的一个项目中使用Spring Data Rest,Spring Data Rest将为我的每个实体创建一个HTTPendpoint。不过,我想从这次扫描中排除一些实体。有这样做的选择吗?
问题内容: 我正在使用Spring Boot和Spring Data Rest创建一个简单的CRUD- App(购物清单)。我有资源:。是否有一种简单的方法可以只返回属于发送请求的用户的资源?(多个用户支持)因此,用户仅获得自己的ShoppingItems,而不是每个ShoppingItem。还是我必须由我自己实现一个Controller? 我发现Spring DataREST基于用户过滤数据,这
20.2.1 排除的资源 某些资源没有必要要在更改时触发重启。例如,Thymeleaf模板可以就地编辑,默认情况下,更改/META-INF/maven、/META-INF/resources、/resources、/static、/public或/templates中的资源不会触发重启,但会触发实时重新加载。如果您想自定义哪些资源改动而不会触发重启,可以使用spring.devtools.rest
我有一个简单的,它使用公开。下面是实体类: 我创建了一个类,它的外观如下: 下面是repository类: 我还在配置中指定了用户投影,以确保它将被使用。 因此,当我进入/users路径时,我得到以下响应(应用了投影):
我们需要改变这种反应: 到_链接上的唯一“自我”部分:
我的情况:我有一个可以有很多工人的组织。我正试图按照SDR项目的主要贡献者的例子向一个组织添加一个新工人,我得到了各种错误(包括204个错误,但什么也没发生)。 以下是我的实体和Rest电话: 收到http://localhost:8080/hal 邮递http://localhost:8080/hal/workers 答复: 最后一步,按照说明中的链接: 进行一些调试,很明显具体的投诉是什么。堆