【问题标题】:How to change HAL links format using Spring HATEOAS如何使用 Spring HATEOAS 更改 HAL 链接格式
【发布时间】:2014-09-07 11:25:42
【问题描述】:

我正在使用 Spring HATEOAS (0.16.0.RELEASE) 构建一个 Spring REST 应用程序,我希望 JSON 链接输出如下所示:

_links: {
   self: {
     href: "https://<ip>/api/policies/321"
   }
}

虽然它呈现如下:

   "links":
      [{
       "rel":"self",
       "href":"http://<ip>/api/policies/321"
      }]

我正在使用 HATEOAS ResourceResourceAssembler

为什么我得到的是这种格式而不是另一种?怎么改?

【问题讨论】:

  • 我猜这取决于您用于构建 HAL 响应的序列化程序。它对 HAL 完全有效,因此一个好的 HAL 解析器可以使用它...
  • 谢谢。你知道哈尔浏览器(haltalk.herokuapp.com/explorer/browser.html#)吗?它不适用于这种格式,所以我认为它可能不是有效的按书 HAL 格式。我错了吗?
  • 我会检查一下,也许我对 HAL 规范的记忆不完善。
  • 是的,你是对的,当我阅读你的代码时,我想我很着急。您的示例具有 collection+json 结构而不是 hal+json。所以我猜你使用了错误的类来生成 json 响应。通过 hal,您使用 _links 和一个对象,其中键是链接关系,值可以是链接数组或单个链接。通过 collection+json 你使用links 这是一个链接数组。
  • 在此处阅读手册:github.com/spring-projects/spring-hateoas,这是 Spring HATEOAS 的纯 JSON 格式。 (它只是类似于collection+json,但乍一看我不认为它是。)我认为如果你想构建一个HAL响应,你必须使用不同的类或不同的设置。这些信息在手册的某处,但对我来说太长了,因为我不开发 java,如果我有时间做另一个爱好,也许是 android...

标签: spring rest spring-mvc spring-hateoas hal


【解决方案1】:

为了使用 HAL 作为我们 RESTful 的消息格式语言 API,并启用自动分页,我们需要一些配置 我们应用程序的变化。自 Spring Data 和 Spring HATEOAS 已经为配置提供了注解,我们只需要添加 那些注释:

@Configuration
@EnableWebMvc
@EnableSpringDataWebSupport
@EnableHypermediaSupport(type = { HypermediaType.HAL })
@ComponentScan(basePackages = {
        "com.jiwhiz.rest"
})
public class WebConfig extends WebMvcConfigurerAdapter {
    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer c) {
        c.defaultContentType(MediaTypes.HAL_JSON);
    }
}

@EnableSpringDataWebSupport 将添加对分页和 @EnableHypermediaSupport(type = { HypermediaType.HAL }) 将添加 超媒体支持。然后我们将默认内容类型设置为 应用程序/hal+json。

引用:Design and Build RESTful API with Spring HATEOAS袁霁

【讨论】:

  • 我看到你一直在调查这个......谢谢!您提到的博客是我一直关注的博客,我的应用程序的配置与您在上面写的一样。不过,我的回复格式和我写的一样:-(
  • Pff,对不起,伙计,我无能为力,我只有几个月的 java 经验。尝试通过spring hateoas的github页面创建一个问题,我认为他们可以提供帮助。
  • 我遇到了同样的问题。我花了一天的时间才发现出了什么问题。但是当我将 WebConfig 实例化为 @Bean 并且不导入配置时,它就可以工作了……很奇怪。
  • 引用现在在jiwhiz.com/blogs/…
【解决方案2】:

确保您使用 com.fasterxml.jackson 依赖项而不是 org.codehaus.jackson 等其他依赖项。例如,在 Maven pom.xml 中:

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.5.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.5.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.5.3</version>
        </dependency>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 2017-12-10
    • 2021-07-17
    相关资源
    最近更新 更多