From f641398465e0b93f4b34c8af07a1fbc649a011d7 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Sat, 28 Dec 2013 14:19:26 +0100 Subject: [PATCH] DATAREST-213 - Make sure legacy representation can be activated. Altered the order of HttpMessageConvertersRegistered based on the default media type being defined. This causes the legacy representation to be rendered as default representation if the default media type on RepositoryRestConfiguration is set to something different from HAL. --- .../RepositoryRestMvcConfiguration.java | 9 ++- ...yRestMvcConfigurationIntegrationTests.java | 43 +++++++++++++ ...yRepresentationConfigIntegrationTests.java | 64 +++++++++++++++++++ 3 files changed, 114 insertions(+), 2 deletions(-) create mode 100644 spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/config/AbstractRepositoryRestMvcConfigurationIntegrationTests.java create mode 100644 spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/config/LegacyRepresentationConfigIntegrationTests.java 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 d54b31f97..85c563cc0 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 @@ -436,8 +436,13 @@ public class RepositoryRestMvcConfiguration extends HateoasAwareSpringDataWebCon List> messageConverters = new ArrayList>(); - messageConverters.add(halJacksonHttpMessageConverter()); - messageConverters.add(jacksonHttpMessageConverter()); + if (config().getDefaultMediaType().equals(MediaTypes.HAL_JSON)) { + messageConverters.add(halJacksonHttpMessageConverter()); + messageConverters.add(jacksonHttpMessageConverter()); + } else { + messageConverters.add(jacksonHttpMessageConverter()); + messageConverters.add(halJacksonHttpMessageConverter()); + } messageConverters.add(uriListHttpMessageConverter()); return messageConverters; diff --git a/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/config/AbstractRepositoryRestMvcConfigurationIntegrationTests.java b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/config/AbstractRepositoryRestMvcConfigurationIntegrationTests.java new file mode 100644 index 000000000..f3732f722 --- /dev/null +++ b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/config/AbstractRepositoryRestMvcConfigurationIntegrationTests.java @@ -0,0 +1,43 @@ +/* + * Copyright 2013 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.rest.webmvc.config; + +import org.junit.Before; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +/** + * Base class for integration tests that are run against a particular configuration defined by the subclass. + * + * @author Oliver Gierke + */ +@RunWith(SpringJUnit4ClassRunner.class) +@WebAppConfiguration +public abstract class AbstractRepositoryRestMvcConfigurationIntegrationTests { + + @Autowired WebApplicationContext context; + protected MockMvc mvc; + + @Before + public void setUp() { + this.mvc = MockMvcBuilders.webAppContextSetup(context).build(); + } +} diff --git a/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/config/LegacyRepresentationConfigIntegrationTests.java b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/config/LegacyRepresentationConfigIntegrationTests.java new file mode 100644 index 000000000..2a1bcaaf7 --- /dev/null +++ b/spring-data-rest-webmvc/src/test/java/org/springframework/data/rest/webmvc/config/LegacyRepresentationConfigIntegrationTests.java @@ -0,0 +1,64 @@ +/* + * Copyright 2013 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.rest.webmvc.config; + +import static org.hamcrest.CoreMatchers.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import org.junit.Test; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.rest.core.config.RepositoryRestConfiguration; +import org.springframework.http.MediaType; +import org.springframework.test.context.ContextConfiguration; + +/** + * Integration tests to check the legacy representation is rendered if HAL is not the default media type. + * + * @author Oliver Gierke + */ +@ContextConfiguration +public class LegacyRepresentationConfigIntegrationTests extends AbstractRepositoryRestMvcConfigurationIntegrationTests { + + @Configuration + static class Config extends RepositoryRestMvcConfiguration { + + @Override + protected void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) { + config.setDefaultMediaType(MediaType.APPLICATION_JSON); + } + } + + /** + * @see DATAREST-213 + */ + @Test + public void returnsJsonIfConfiguredAndRequested() throws Exception { + + mvc.perform(get("/").accept(MediaType.APPLICATION_JSON)). // + andExpect(jsonPath("content", is(notNullValue()))); + } + + /** + * @see DATAREST-213 + */ + @Test + public void returnsJsonIfConfigured() throws Exception { + + mvc.perform(get("/").accept(MediaType.ALL)). // + andExpect(jsonPath("content", is(notNullValue()))); + } +}