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()))); + } +}