使用自定义媒体类型(非 HAL)

问题描述 投票:0回答:1

使用 Spring Data REST 是否可以使用自定义媒体类型? (例如,意味着 JSON:API / 媒体类型

application/vnd.api+json
,而不是 HAL 和媒体类型
application/hal+json
)。

文档在多个地方(示例)指出 - 仅支持媒体类型

application/hal+json
application/json

但是,据我了解,Spring Data REST 是建立在 Spring HATEOAS 之上的,它确实支持自定义媒体类型,所以我认为这应该是可能的。

我想利用 Spring Data REST 的便利性,因为我不想创建自己的控制器类。我喜欢 Spring Data REST 为我做这一切,我只是想使用合理的 REST 约定公开 Spring Data CRUD 存储库。

java spring-boot spring-data-rest
1个回答
0
投票

基于 VMWare 开发人员的这个答案,这个话题似乎已经引起了争论,原因如下:

我希望事情就是这么简单。大多数人都会关注 Spring Data REST 并喜欢它,因为他们可以轻松地获取其存储库的 HTTP 资源。但它的主要特征不是资源的实际暴露,而是基于领域模型中表达的聚合结构推导表示边界。这包括使用 HAL 的嵌入机制,对嵌入的值应用投影。如果将 HAL 表示发回服务器,则正确处理嵌入的值。

如果没有适当的测试,我们无法确保仅仅让用户激活新的媒体类型(Collection JSON、Siren 等)就能让他们看到有用、正确的输出,从而让所有公开的 HTTP 资源按照宣传的那样工作。我什至不是说它不适用于某些“呈现数据”风格不同的媒体类型。我只是无法打开一扇门(“你现在可以简单地激活新媒体类型”),然后冒着不得不追赶那些向左右报告“这对警报器不起作用”、“那不起作用”的人的风险与 Collection JSON”和“哦,这不适用于我自定义实现的媒体类型。”。

对于某些包含表单的媒体类型,这根据定义是行不通的,因为我们的控制器目前根本不添加任何可供性。我可以想象继续这样做,看看它如何与 HAL FORMS 一起工作,添加关于现在预期的表示的测试,并在某个时候添加另一种媒体类型,看看会产生什么结果。也就是说,这不是半个结果。一天的努力。

底线:不可能。

© www.soinside.com 2019 - 2024. All rights reserved.