问题标签 [hal-json]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
json - HAL JSON - 标准是否允许有多个级别的嵌入?
我想知道是否允许在 JSON 中的 _embed 元素中包含更多的 _embed 元素,或者这个想法是否只有一个级别?
请参阅普通 HAL 示例:
}
以及问题是什么(注意第二个嵌入是第一个的孩子):
我自己正在阅读http://stateless.co/hal_specification.html上的文档,因为嵌入式资源与普通资源相同,因此它可以再次包含嵌入式资源?
spring - Resttemplate - 如何使用 HAL 表示发布对象?
当尝试通过 RestTemplate 发布到 Spring-Data-Rest Web 服务时,我的域对象的 JSON 表示正在转换为不在 HAL 表示中的完整 JSON 对象。我在这里的假设是我需要将 Jackson2HalModule 注册为反序列化器,但考虑到我将它注册到 objectMapper 时我不确定该怎么做。在 web 服务上调用 GET 时,序列化工作正常,但不适用于 POST/PUT:
请求 outputBuffer 字段:
休息模板配置:
请求标头:
调用方法:
spring-data-rest - api管理平台中的spring-data-rest HAL基本url
所以我有一个托管在heroku中的spring-data-rest应用程序:hotel-app.herokuapp.com
但我想在 mashape 这样的 api 管理平台中公开它。curl --get --include " https://greekscholar-test-v1.p.mashape.com/ " \ -H "X-Mashape-Key: xPlviBQhz3mshmhlL19hyJjNXJJXp1hm6H5jsn10ZrVHr4n3ZC"
所有链接都回到我原来的heroku主机。如何将链接配置为仅显示相对路径或转到 api 管理平台的主机?
spring-data-rest - 如何使用 Spring Data REST 从查询中返回单个项目
我们如何让 spring-data-rest 为查询返回单个资源,而不是嵌入列表?这将使客户的导航更加直观。
例如
代替
我有一个始终返回 1 或 0 结果的 JPA 存储库。唯一性由数据库约束强制执行。
spring-data-rest 不是返回单个凭证对象,而是返回一个嵌入式列表。
相反,它应该返回与我通过主键检索它一样的返回值。
否则客户端的 API 看起来很糟糕
如果是以下情况,那么对于客户端来说,遍历会更容易理解:
rest - 如何在 Grails 中使用 HAL 自定义链接渲染类型?
从 grails 文档中的自定义链接渲染部分,我可以看到可以自定义 href
如何自定义“类型”字段?
java - 由于 HAL+JSON 媒体类型不明确,无法使用 Spring HATEOAS 执行 HAL+JSON Level 3 RESTful API
3 级RESTful API 的功能自定义媒体类型application/vnd.service.entity.v1+json
,例如,。在我的例子中,我使用HAL在我的 JSON 中提供相关资源之间的链接。
我不清楚使用 HAL+JSON 的自定义媒体类型的正确格式。我目前拥有的,看起来像application/vnd.service.entity.v1.hal+json
。我最初选择了application/vnd.service.entity.v1+hal+json
,但+hal
后缀未注册,因此违反了 RFC6838 的第 4.2.8 节。
现在 Spring HATEOAS 支持开箱即用的 JSON 链接,但对于 HAL-JSON,您需要使用@EnableHypermediaSupport(type=EnableHypermediaSupport.HypermediaType.HAL)
. 就我而言,因为我使用的是 Spring Boot,所以我将它附加到我的初始化程序类(即,扩展类SpringBootServletInitializer
)。但是 Spring Boot 不会立即识别我的自定义媒体类型。因此,为此,我必须弄清楚如何让它知道它需要将 HAL 对象映射器用于表单的媒体类型application/vnd.service.entity.v1.hal+json
。
对于我的第一次尝试,我在 Spring Boot 初始化程序中添加了以下内容:
这有效,我以正确的 HAL 格式获取链接。然而,这是巧合。这是因为最终被报告为“兼容”的实际媒体类型application/vnd.service.entity.v1.hal+json
是*+json
; 它不承认它反对application/*hal+json
(见后面的解释)。我不喜欢这个解决方案,因为它污染了现有的 JSON 转换器,担心 HAL。所以,我做了一个不同的解决方案,如下所示:
该解决方案不起作用;我最终在我的 JSON 中获得了不符合 HAL 的链接。这是因为application/vnd.service.entity.v1.hal+json
不被. application/*hal+json
发生这种情况的原因是MimeType
,它检查媒体类型兼容性,只识别以*+
作为子类型的有效通配符媒体类型开头的媒体类型(例如,application/*+json
)。这就是第一个解决方案奏效的原因(巧合)。
所以这里有两个问题:
MimeType
永远不会识别application/vnd.service.entity.v1.hal+json
针对application/*hal+json
.MimeType
将application/vnd.service.entity.v1+hal+json
识别针对的表单的供应商特定 HAL 媒体类型application/*+hal+json
,但是根据 RFC6838 的第 4.2.8 节,这些是无效的 mimetypes 。
似乎唯一正确的方法是 if+hal
被识别为有效后缀,在这种情况下,上面的第二个选项就可以了。否则,任何其他类型的通配符媒体类型都无法专门识别供应商特定的 HAL 媒体类型。唯一的选择是用 HAL 问题覆盖现有的 JSON 消息转换器(参见第一个解决方案)。
现在的另一个解决方法是在为消息转换器创建支持的媒体类型列表时指定您正在使用的每个自定义媒体类型。那是:
这样做的好处是不会污染现有的 JSON 转换器,但似乎不够优雅。有谁知道正确的解决方案?我会完全错了吗?
java - 是否可以覆盖 MappingJackson2HttpMessageConverter 以支持 HAL+JSON?
在我的 Spring Boot 应用程序中,我已将 HAL 对象映射器分配给MappingJackson2HttpMessageConverter
. 这是因为我的自定义媒体类型以默认转换器结束+json
并最终被默认转换器识别。MappingJackson2HttpMessageConverter
Spring HATEOAS 注册的自定义实例只识别application/hal+json
. 我的自定义媒体类型的格式application/vnd.service.entity.v1.hal+json
为 ,默认实例可以识别(因为它支持application/json
和application/*+json
)。但是,默认实例不会将链接正确地序列化为 HAL 约定。我已经能够通过像这样注册映射器来解决它:
有人担心我现在正在用 HAL 问题污染常规的 JSON 序列化/反序列化,但我想不出任何其他方式(除了明确指定我使用的每个自定义媒体类型)来做到这一点。想法?
client - 使用 Traverson 的 Spring-Hateoas 客户端
我想通过 Traverson 的 Spring-Hateoas 使用我的休息服务,但我遇到了以下问题,我在 web.xml 中没有找到任何东西。我正在使用Spring-Boot 1.1.10.RELEASE。
我的客户电话如下所示:
我得到以下问题:
=====
相关配置:
聚甲醛:
应用类:
====
调用上述 URL 时的 Rest-Application 响应:
谢谢你的帮忙。
java - Dropwizard + Halbuilder 寻找消息正文作者
我正在使用 dropwizard 构建一个 Restful 服务。我正在使用 halbuilder 创建 json+hal 媒体类型。我的资源在获取请求上返回了一个带有几个链接的表示。它在我的开发环境中运行良好,但是当我将服务部署到 heroku 时,出现以下异常:
对于解决此问题的任何帮助,我将不胜感激。
json - 谁能很好地解释 CURIE 以及如何使用它们?
我见过HAL 规范中描述的 CURIE 。乍一看,它看起来像是一种为 URI 提供模板的方法。但是,我也看到它突出地提到它可以用于访问rel
. 哪一个?它只是一个模板机制吗?有没有人有一个好的用例的例子?
此外,以下是否是 CURIE 的合法使用?或者它应该只用于提供关于 a 的文档rel
吗?
这里bundle:channels
将扩展为http://my.api.com/bundles/1/channels
.