Как изменить формат ссылок HAL с помощью Spring HATEOAS

Я создаю приложение REST Spring, используя Spring HATEOAS (0.16.0.RELEASE), и я хотел бы, чтобы выходные строки JSON выглядели следующим образом:

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

пока он отображает:

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

Я использую HATEOAS Resource и ResourceAssembler.

Почему я получаю этот формат вместо другого? Как я могу его изменить?

Ответы

Ответ 1

Чтобы использовать HAL в качестве языка сообщений для нашего RESTful API и включить автоматическую разбивку на страницы, нам нужна некоторая конфигурация изменения в нашем приложении. Поскольку Spring Данные и 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}) добавит поддержка гипермедиа. Затем мы устанавливаем тип содержимого по умолчанию Приложение/гал + JSON.

cite: Разработка и создание RESTful API с Spring HATEOAS от Yuan Ji

Ответ 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>

Ответ 3

Убедитесь, что вы установите заголовок запроса Accept следующим образом:

Accept: application/hal+json