DATAREST-654 - Added suport for internationalization of enum values.
RepositoryRestConfiguration now exposes an option to enable enum value serialization and a nested configuration object to tweak the details. If enabled, a Jackson serializer and deserializer is registered trying to resolve the enum values from the Spring Data REST resource bundle using the fully-qualified enum value name as key. If no explicitly configured value is configured a default translation is triggered that capitalizes the lowercased value name replacing the underscores with spaces (e.g. PAYMENT_EXPECTED -> Payment expected). This can be opted out of, of course. On the parsing side the deserializer will also consult the resourcebundle and default translation but also accepting the enum name as is (also opt-outable). Deprecated non-bean-style accessors for projection and metadata configuration on RepositoryRestConfiguration to make these options tweakable via Spring Boot application properties by default.
This commit is contained in:
@@ -17,8 +17,13 @@ package org.springframework.data.rest.core;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.*;
|
||||
import static org.junit.Assert.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.data.rest.core.config.EnumTranslationConfiguration;
|
||||
import org.springframework.data.rest.core.config.MetadataConfiguration;
|
||||
import org.springframework.data.rest.core.config.ProjectionDefinitionConfiguration;
|
||||
import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
|
||||
import org.springframework.http.MediaType;
|
||||
|
||||
@@ -30,14 +35,21 @@ import org.springframework.http.MediaType;
|
||||
*/
|
||||
public class RepositoryRestConfigurationUnitTests {
|
||||
|
||||
RepositoryRestConfiguration configuration;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
|
||||
this.configuration = new RepositoryRestConfiguration(new ProjectionDefinitionConfiguration(),
|
||||
new MetadataConfiguration(), mock(EnumTranslationConfiguration.class));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see DATAREST-34
|
||||
*/
|
||||
@Test
|
||||
public void returnsBodiesIfAcceptHeaderPresentByDefault() {
|
||||
|
||||
RepositoryRestConfiguration configuration = new RepositoryRestConfiguration();
|
||||
|
||||
assertThat(configuration.returnBodyOnCreate(MediaType.APPLICATION_JSON_VALUE), is(true));
|
||||
assertThat(configuration.returnBodyOnUpdate(MediaType.APPLICATION_JSON_VALUE), is(true));
|
||||
}
|
||||
@@ -48,8 +60,6 @@ public class RepositoryRestConfigurationUnitTests {
|
||||
@Test
|
||||
public void doesNotReturnBodiesIfNoAcceptHeaderPresentByDefault() {
|
||||
|
||||
RepositoryRestConfiguration configuration = new RepositoryRestConfiguration();
|
||||
|
||||
assertThat(configuration.returnBodyOnCreate(null), is(false));
|
||||
assertThat(configuration.returnBodyOnUpdate(null), is(false));
|
||||
}
|
||||
@@ -60,8 +70,6 @@ public class RepositoryRestConfigurationUnitTests {
|
||||
@Test
|
||||
public void doesNotReturnBodiesIfEmptyAcceptHeaderPresentByDefault() {
|
||||
|
||||
RepositoryRestConfiguration configuration = new RepositoryRestConfiguration();
|
||||
|
||||
assertThat(configuration.returnBodyOnCreate(""), is(false));
|
||||
assertThat(configuration.returnBodyOnUpdate(""), is(false));
|
||||
}
|
||||
@@ -72,7 +80,6 @@ public class RepositoryRestConfigurationUnitTests {
|
||||
@Test
|
||||
public void doesNotReturnBodyForUpdateIfExplicitlyDeactivated() {
|
||||
|
||||
RepositoryRestConfiguration configuration = new RepositoryRestConfiguration();
|
||||
configuration.setReturnBodyOnUpdate(false);
|
||||
|
||||
assertThat(configuration.returnBodyOnUpdate(null), is(false));
|
||||
@@ -86,7 +93,6 @@ public class RepositoryRestConfigurationUnitTests {
|
||||
@Test
|
||||
public void doesNotReturnBodyForCreateIfExplicitlyDeactivated() {
|
||||
|
||||
RepositoryRestConfiguration configuration = new RepositoryRestConfiguration();
|
||||
configuration.setReturnBodyOnCreate(false);
|
||||
|
||||
assertThat(configuration.returnBodyOnCreate(null), is(false));
|
||||
@@ -100,7 +106,6 @@ public class RepositoryRestConfigurationUnitTests {
|
||||
@Test
|
||||
public void returnsBodyForUpdateIfExplicitlyActivated() {
|
||||
|
||||
RepositoryRestConfiguration configuration = new RepositoryRestConfiguration();
|
||||
configuration.setReturnBodyOnUpdate(true);
|
||||
|
||||
assertThat(configuration.returnBodyOnUpdate(null), is(true));
|
||||
@@ -114,7 +119,6 @@ public class RepositoryRestConfigurationUnitTests {
|
||||
@Test
|
||||
public void returnsBodyForCreateIfExplicitlyActivated() {
|
||||
|
||||
RepositoryRestConfiguration configuration = new RepositoryRestConfiguration();
|
||||
configuration.setReturnBodyOnCreate(true);
|
||||
|
||||
assertThat(configuration.returnBodyOnCreate(null), is(true));
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
*/
|
||||
package org.springframework.data.rest.core;
|
||||
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@@ -26,6 +28,9 @@ import org.springframework.context.annotation.Import;
|
||||
import org.springframework.data.mapping.context.MappingContext;
|
||||
import org.springframework.data.mapping.context.PersistentEntities;
|
||||
import org.springframework.data.repository.support.Repositories;
|
||||
import org.springframework.data.rest.core.config.EnumTranslationConfiguration;
|
||||
import org.springframework.data.rest.core.config.MetadataConfiguration;
|
||||
import org.springframework.data.rest.core.config.ProjectionDefinitionConfiguration;
|
||||
import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
|
||||
import org.springframework.data.rest.core.domain.jpa.ConfiguredPersonRepository;
|
||||
import org.springframework.data.rest.core.domain.jpa.JpaRepositoryConfig;
|
||||
@@ -52,7 +57,8 @@ public class RepositoryTestsConfig {
|
||||
@SuppressWarnings("deprecation")
|
||||
@Bean
|
||||
public RepositoryRestConfiguration config() {
|
||||
RepositoryRestConfiguration config = new RepositoryRestConfiguration();
|
||||
RepositoryRestConfiguration config = new RepositoryRestConfiguration(new ProjectionDefinitionConfiguration(),
|
||||
new MetadataConfiguration(), mock(EnumTranslationConfiguration.class));
|
||||
|
||||
config.setResourceMappingForDomainType(Person.class).setRel("person");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user