Skip to content

Commit b79934a

Browse files
committed
Detect existing MultipartResolver beans
Update MultipartAutoConfiguration to detect any MultipartResolver beans rather than just StandardServletMultipartResolvers. Fixes gh-1857
1 parent 322bdd6 commit b79934a

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/MultipartAutoConfiguration.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.springframework.boot.context.properties.EnableConfigurationProperties;
2929
import org.springframework.context.annotation.Bean;
3030
import org.springframework.context.annotation.Configuration;
31+
import org.springframework.web.multipart.MultipartResolver;
3132
import org.springframework.web.multipart.support.StandardServletMultipartResolver;
3233

3334
/**
@@ -60,7 +61,7 @@ public MultipartConfigElement multipartConfigElement() {
6061
}
6162

6263
@Bean
63-
@ConditionalOnMissingBean
64+
@ConditionalOnMissingBean(value = MultipartResolver.class)
6465
public StandardServletMultipartResolver multipartResolver() {
6566
return new StandardServletMultipartResolver();
6667
}

spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/MultipartAutoConfigurationTests.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,14 @@
3939
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
4040

4141
import static org.hamcrest.Matchers.equalTo;
42+
import static org.hamcrest.Matchers.instanceOf;
43+
import static org.hamcrest.Matchers.not;
4244
import static org.junit.Assert.assertEquals;
4345
import static org.junit.Assert.assertNotNull;
4446
import static org.junit.Assert.assertNull;
4547
import static org.junit.Assert.assertSame;
4648
import static org.junit.Assert.assertThat;
49+
import static org.mockito.Mockito.mock;
4750

4851
/**
4952
* Tests for {@link MultipartAutoConfiguration}. Tests an empty configuration, no
@@ -165,6 +168,16 @@ public Object getProperty(String name) {
165168
assertEquals(0, this.context.getBeansOfType(MultipartConfigElement.class).size());
166169
}
167170

171+
@Test
172+
public void containerWithCustomMulipartResolver() throws Exception {
173+
this.context = new AnnotationConfigEmbeddedWebApplicationContext(
174+
ContainerWithCustomMultipartResolver.class, BaseConfiguration.class);
175+
MultipartResolver multipartResolver = this.context
176+
.getBean(MultipartResolver.class);
177+
assertThat(multipartResolver,
178+
not(instanceOf(StandardServletMultipartResolver.class)));
179+
}
180+
168181
private void verifyServletWorks() {
169182
RestTemplate restTemplate = new RestTemplate();
170183
assertEquals("Hello", restTemplate.getForObject("http://localhost:"
@@ -243,6 +256,15 @@ WebController webController() {
243256

244257
}
245258

259+
public static class ContainerWithCustomMultipartResolver {
260+
261+
@Bean
262+
MultipartResolver multipartResolver() {
263+
return mock(MultipartResolver.class);
264+
}
265+
266+
}
267+
246268
@Controller
247269
public static class WebController {
248270

0 commit comments

Comments
 (0)