diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/hateoas/HypermediaAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/hateoas/HypermediaAutoConfiguration.java index a3c21e5507..d218036ab9 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/hateoas/HypermediaAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/hateoas/HypermediaAutoConfiguration.java @@ -19,9 +19,11 @@ package org.springframework.boot.autoconfigure.hateoas; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration; import org.springframework.context.annotation.Configuration; +import org.springframework.hateoas.LinkDiscoverers; import org.springframework.hateoas.Resource; import org.springframework.hateoas.config.EnableHypermediaSupport; import org.springframework.hateoas.config.EnableHypermediaSupport.HypermediaType; @@ -31,10 +33,12 @@ import org.springframework.hateoas.config.EnableHypermediaSupport.HypermediaType * {@link EnableHypermediaSupport}. * * @author Roy Clarkson + * @author Oliver Gierke * @since 1.1.0 */ @Configuration @ConditionalOnClass(Resource.class) +@ConditionalOnMissingBean(LinkDiscoverers.class) @AutoConfigureAfter(WebMvcAutoConfiguration.class) public class HypermediaAutoConfiguration { diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/hateoas/HypermediaAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/hateoas/HypermediaAutoConfigurationTests.java index 510ffd93fd..528d014db6 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/hateoas/HypermediaAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/hateoas/HypermediaAutoConfigurationTests.java @@ -18,9 +18,12 @@ package org.springframework.boot.autoconfigure.hateoas; import org.junit.After; import org.junit.Test; +import org.springframework.context.annotation.Configuration; import org.springframework.hateoas.LinkDiscoverer; import org.springframework.hateoas.LinkDiscoverers; import org.springframework.hateoas.MediaTypes; +import org.springframework.hateoas.config.EnableHypermediaSupport; +import org.springframework.hateoas.config.EnableHypermediaSupport.HypermediaType; import org.springframework.hateoas.hal.HalLinkDiscoverer; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; @@ -31,6 +34,7 @@ import static org.junit.Assert.assertTrue; * Tests for {@link HypermediaAutoConfiguration}. * * @author Roy Clarkson + * @author Oliver Gierke */ public class HypermediaAutoConfigurationTests { @@ -53,5 +57,21 @@ public class HypermediaAutoConfigurationTests { LinkDiscoverer discoverer = discoverers.getLinkDiscovererFor(MediaTypes.HAL_JSON); assertTrue(HalLinkDiscoverer.class.isInstance(discoverer)); } + + @Test + public void doesBackOffIfEnableHypermediaSupportIsDeclaredManually() { + + this.context = new AnnotationConfigWebApplicationContext(); + this.context.register(SampleConfig.class, HypermediaAutoConfiguration.class); + this.context.refresh(); + + this.context.getBean(LinkDiscoverers.class); + } + + @Configuration + @EnableHypermediaSupport(type = HypermediaType.HAL) + static class SampleConfig { + + } }