Skip to content

Commit e074fcc

Browse files
quaffodrotbohm
authored andcommitted
Avoid registering a SpringDataWebSettings bean by default.
We now refrain from registering a SpringDataWebSettings instance as bean in the ApplicationContext if @EnableSpringDataWebSupport is used without an explicit declaration of pageSerializationMode. This allows Spring Boot to use the annotation, but allow the attribute value to be configured via a property at the same time. See spring-projects/spring-boot#39797 (comment) for details. Fixes GH-3054.
1 parent e994f6b commit e074fcc

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

src/main/java/org/springframework/data/web/config/EnableSpringDataWebSupport.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
* @see SpringDataWebConfiguration
7070
* @see HateoasAwareSpringDataWebConfiguration
7171
* @author Oliver Gierke
72+
* @author Yanming Zhou
7273
*/
7374
@Retention(RetentionPolicy.RUNTIME)
7475
@Target({ ElementType.TYPE, ElementType.ANNOTATION_TYPE })
@@ -170,6 +171,7 @@ public String[] selectImports(AnnotationMetadata importingClassMetadata) {
170171
* {@link EnableSpringDataWebSupport}.
171172
*
172173
* @author Oliver Drotbohm
174+
* @author Yanming Zhou
173175
* @soundtrack Norah Jones - Chasing Pirates
174176
* @since 3.3
175177
*/
@@ -190,8 +192,14 @@ public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, B
190192
return;
191193
}
192194

195+
Object pageSerializationMode = attributes.get("pageSerializationMode");
196+
197+
if (pageSerializationMode == PageSerializationMode.DIRECT) {
198+
return;
199+
}
200+
193201
AbstractBeanDefinition definition = BeanDefinitionBuilder.rootBeanDefinition(SpringDataWebSettings.class)
194-
.addConstructorArgValue(attributes.get("pageSerializationMode"))
202+
.addConstructorArgValue(pageSerializationMode)
195203
.getBeanDefinition();
196204

197205
String beanName = importBeanNameGenerator.generateBeanName(definition, registry);

src/test/java/org/springframework/data/web/config/EnableSpringDataWebSupportIntegrationTests.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import org.junit.jupiter.api.Test;
2626

27+
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
2728
import org.springframework.beans.factory.annotation.Autowired;
2829
import org.springframework.context.ApplicationContext;
2930
import org.springframework.context.annotation.Bean;
@@ -67,7 +68,7 @@ class EnableSpringDataWebSupportIntegrationTests {
6768

6869
@Configuration
6970
@EnableWebMvc
70-
@EnableSpringDataWebSupport
71+
@EnableSpringDataWebSupport(pageSerializationMode = EnableSpringDataWebSupport.PageSerializationMode.VIA_DTO)
7172
static class SampleConfig {
7273

7374
@Bean
@@ -304,6 +305,10 @@ void registersSpringDataWebSettingsBean() {
304305
void usesDirectPageSerializationMode() throws Exception {
305306

306307
var applicationContext = WebTestUtils.createApplicationContext(PageSampleConfigWithDirect.class);
308+
309+
// SpringDataWebSettings shouldn't be registered if pageSerializationMode is default
310+
assertThatExceptionOfType(NoSuchBeanDefinitionException.class).isThrownBy(() -> applicationContext.getBean(SpringDataWebSettings.class));
311+
307312
var mvc = MockMvcBuilders.webAppContextSetup(applicationContext).build();
308313

309314
mvc.perform(post("/page"))//

0 commit comments

Comments
 (0)