From 64ece65d8bf7cf2e1d63acbba533b68fea5af646 Mon Sep 17 00:00:00 2001 From: Oliver Drotbohm Date: Wed, 18 Sep 2024 13:33:18 +0200 Subject: [PATCH] Tweak HAL-FORMS setup to fall back on HAL as media type if no templates registered. Fixes GH-2418. --- .../RepositoryRestMvcConfiguration.java | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.java b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.java index 6e0b2c128..d5c3fea75 100644 --- a/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.java +++ b/spring-data-rest-webmvc/src/main/java/org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.java @@ -67,7 +67,15 @@ import org.springframework.data.rest.core.support.RepositoryRelProvider; import org.springframework.data.rest.core.support.SelfLinkProvider; import org.springframework.data.rest.core.support.UnwrappingRepositoryInvokerFactory; -import org.springframework.data.rest.webmvc.*; +import org.springframework.data.rest.webmvc.BasePathAwareHandlerMapping; +import org.springframework.data.rest.webmvc.BaseUri; +import org.springframework.data.rest.webmvc.EmbeddedResourcesAssembler; +import org.springframework.data.rest.webmvc.HttpHeadersPreparer; +import org.springframework.data.rest.webmvc.ProfileResourceProcessor; +import org.springframework.data.rest.webmvc.RepositoryRestExceptionHandler; +import org.springframework.data.rest.webmvc.RepositoryRestHandlerAdapter; +import org.springframework.data.rest.webmvc.RepositoryRestHandlerMapping; +import org.springframework.data.rest.webmvc.RestMediaTypes; import org.springframework.data.rest.webmvc.alps.AlpsJsonHttpMessageConverter; import org.springframework.data.rest.webmvc.alps.RootResourceInformationToAlpsDescriptorConverter; import org.springframework.data.rest.webmvc.convert.UriListHttpMessageConverter; @@ -110,6 +118,7 @@ import org.springframework.hateoas.mediatype.hal.Jackson2HalModule; import org.springframework.hateoas.mediatype.hal.Jackson2HalModule.HalHandlerInstantiator; import org.springframework.hateoas.mediatype.hal.forms.HalFormsConfiguration; +import org.springframework.hateoas.mediatype.hal.forms.HalFormsHttpMessageConverter; import org.springframework.hateoas.mediatype.hal.forms.Jackson2HalFormsModule; import org.springframework.hateoas.server.LinkRelationProvider; import org.springframework.hateoas.server.core.EvoInflectorLinkRelationProvider; @@ -606,12 +615,7 @@ TypeConstrainedMappingJackson2HttpMessageConverter halFormsJacksonHttpMessageCon defaultedRelProvider, curieProvider, resolver.getObject(), configuration.getHalConfiguration(), applicationContext.getAutowireCapableBeanFactory())); - TypeConstrainedMappingJackson2HttpMessageConverter converter = new TypeConstrainedMappingJackson2HttpMessageConverter( - RepresentationModel.class); - converter.setSupportedMediaTypes(Collections.singletonList(MediaTypes.HAL_FORMS_JSON)); - converter.setObjectMapper(mapper); - - return converter; + return new HalFormsHttpMessageConverter(applicationContext, mapper); } public ObjectMapper halObjectMapper(LinkCollector linkCollector) { @@ -682,9 +686,9 @@ public RequestMappingHandlerAdapter repositoryExporterHandlerAdapter( /** * The {@link HandlerMapping} to delegate requests to Spring Data REST controllers. Sets up a - * {@link DelegatingHandlerMapping} to make sure manually implemented {@link BasePathAwareController} instances that - * register custom handlers for certain media types don't cause the {@link RepositoryRestHandlerMapping} to be - * omitted. See DATAREST-490. + * {@link DelegatingHandlerMapping} to make sure manually implemented + * {@link org.springframework.data.rest.webmvc.BasePathAwareController} instances that register custom handlers for + * certain media types don't cause the {@link RepositoryRestHandlerMapping} to be omitted. See DATAREST-490. * * @return */