2222import org .springframework .boot .autoconfigure .condition .ConditionalOnMissingBean ;
2323import org .springframework .boot .autoconfigure .condition .ConditionalOnWebApplication ;
2424import org .springframework .boot .autoconfigure .web .WebMvcAutoConfiguration ;
25+ import org .springframework .boot .autoconfigure .web .WebMvcProperties ;
2526import org .springframework .boot .context .properties .ConfigurationProperties ;
2627import org .springframework .boot .context .properties .EnableConfigurationProperties ;
2728import org .springframework .context .annotation .Bean ;
2829import org .springframework .context .annotation .Configuration ;
30+ import org .springframework .test .web .servlet .DispatcherServletCustomizer ;
2931import org .springframework .test .web .servlet .MockMvc ;
3032import org .springframework .test .web .servlet .MockMvcBuilder ;
3133import org .springframework .test .web .servlet .setup .DefaultMockMvcBuilder ;
3234import org .springframework .test .web .servlet .setup .MockMvcBuilders ;
3335import org .springframework .web .context .WebApplicationContext ;
36+ import org .springframework .web .servlet .DispatcherServlet ;
3437
3538/**
3639 * Auto-configuration for {@link MockMvc}.
3740 *
3841 * @author Phillip Webb
3942 * @author Andy Wilkinson
43+ * @author Stephane Nicoll
4044 * @see AutoConfigureWebMvc
4145 * @since 1.4.0
4246 */
4347@ Configuration
4448@ ConditionalOnWebApplication
4549@ AutoConfigureAfter (WebMvcAutoConfiguration .class )
46- @ EnableConfigurationProperties
50+ @ EnableConfigurationProperties ( WebMvcProperties . class )
4751public class MockMvcAutoConfiguration {
4852
4953 private final WebApplicationContext context ;
54+ private final WebMvcProperties webMvcProperties ;
5055
51- MockMvcAutoConfiguration (WebApplicationContext context ) {
56+ MockMvcAutoConfiguration (WebApplicationContext context ,
57+ WebMvcProperties webMvcProperties ) {
5258 this .context = context ;
59+ this .webMvcProperties = webMvcProperties ;
5360 }
5461
5562 @ Bean
5663 @ ConditionalOnMissingBean (MockMvcBuilder .class )
5764 public DefaultMockMvcBuilder mockMvcBuilder (
5865 List <MockMvcBuilderCustomizer > customizers ) {
5966 DefaultMockMvcBuilder builder = MockMvcBuilders .webAppContextSetup (this .context );
67+ builder .addDispatcherServletCustomizer (
68+ new MockMvcDispatcherServletCustomizer (this .webMvcProperties ));
6069 for (MockMvcBuilderCustomizer customizer : customizers ) {
6170 customizer .customize (builder );
6271 }
@@ -75,4 +84,25 @@ public MockMvc mockMvc(MockMvcBuilder builder) {
7584 return builder .build ();
7685 }
7786
87+ private static class MockMvcDispatcherServletCustomizer
88+ implements DispatcherServletCustomizer {
89+
90+ private final WebMvcProperties webMvcProperties ;
91+
92+ MockMvcDispatcherServletCustomizer (WebMvcProperties webMvcProperties ) {
93+ this .webMvcProperties = webMvcProperties ;
94+ }
95+
96+ @ Override
97+ public void customize (DispatcherServlet dispatcherServlet ) {
98+ dispatcherServlet .setDispatchOptionsRequest (
99+ this .webMvcProperties .isDispatchOptionsRequest ());
100+ dispatcherServlet .setDispatchTraceRequest (
101+ this .webMvcProperties .isDispatchTraceRequest ());
102+ dispatcherServlet .setThrowExceptionIfNoHandlerFound (
103+ this .webMvcProperties .isThrowExceptionIfNoHandlerFound ());
104+ }
105+
106+ }
107+
78108}
0 commit comments