According to the Spring HATEOAS API,
Activates hypermedia support in the ApplicationContext. Will register infrastructure beans to support all appropriate web stacks based on selected HypermediaMappingInformation-type as well as the classpath.
My Spring Boot application (2.3.4) has the following dependencies:
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
implementation 'org.springframework.boot:spring-boot-starter-data-rest'
My SpringBootApplication class:
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
// run this application as a Spring application
SpringApplication.run(MyApplication.class, args);
}
}
I've noticed my repositories are returning HALresponses via Spring Data REST without annotating my application class with @EnableHypermediSupport. When is this annotation needed? Do I not need it since I'm using Spring Data REST?
Spring Boot already auto configures for you if your dependencies contains spring-hateoas
. The dependency spring-boot-starter-data-rest
contains spring-hateoas
.
File org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration
has @EnableHypermediaSupport(type = HypermediaType.HAL)
.
/**
* {@link EnableAutoConfiguration Auto-configuration} for Spring HATEOAS's
* {@link EnableHypermediaSupport @EnableHypermediaSupport}.
*
* @author Roy Clarkson
* @author Oliver Gierke
* @author Andy Wilkinson
* @since 1.1.0
*/
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass({ EntityModel.class, RequestMapping.class, RequestMappingHandlerAdapter.class, Plugin.class })
@ConditionalOnWebApplication
@AutoConfigureAfter({ WebMvcAutoConfiguration.class, JacksonAutoConfiguration.class,
HttpMessageConvertersAutoConfiguration.class, RepositoryRestMvcAutoConfiguration.class })
@EnableConfigurationProperties(HateoasProperties.class)
@Import(HypermediaHttpMessageConverterConfiguration.class)
public class HypermediaAutoConfiguration {
@Configuration(proxyBeanMethods = false)
@ConditionalOnMissingBean(LinkDiscoverers.class)
@ConditionalOnClass(ObjectMapper.class)
@EnableHypermediaSupport(type = HypermediaType.HAL)
protected static class HypermediaConfiguration {
}
}
Of course, you can override the default configuration.
@Configuration
@EnableHypermediaSupport(…)
class MyHypermediaConfiguration { … }