Add setIgnoreDefaultModelOnRedirect support
Add a `spring.mvc.set-ignore-default-model-on-redirect` property to allow RequestMappingHandlerAdapter.setIgnoreDefaultModelOnRedirect to be easily customized and change the default value to 'true'. Fixes gh-2018
This commit is contained in:
@@ -42,6 +42,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
|
||||
import org.springframework.context.ResourceLoaderAware;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.core.convert.converter.Converter;
|
||||
@@ -63,6 +64,7 @@ import org.springframework.web.servlet.DispatcherServlet;
|
||||
import org.springframework.web.servlet.LocaleResolver;
|
||||
import org.springframework.web.servlet.View;
|
||||
import org.springframework.web.servlet.ViewResolver;
|
||||
import org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration;
|
||||
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
|
||||
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
|
||||
@@ -70,6 +72,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupp
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
|
||||
import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping;
|
||||
import org.springframework.web.servlet.i18n.FixedLocaleResolver;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
|
||||
import org.springframework.web.servlet.resource.ResourceHttpRequestHandler;
|
||||
import org.springframework.web.servlet.view.BeanNameViewResolver;
|
||||
import org.springframework.web.servlet.view.ContentNegotiatingViewResolver;
|
||||
@@ -128,7 +131,7 @@ public class WebMvcAutoConfiguration {
|
||||
// Defined as a nested config to ensure WebMvcConfigurerAdapter is not read when not
|
||||
// on the classpath
|
||||
@Configuration
|
||||
@EnableWebMvc
|
||||
@Import(EnableWebMvcConfiguration.class)
|
||||
@EnableConfigurationProperties({ WebMvcProperties.class, ResourceProperties.class })
|
||||
public static class WebMvcAutoConfigurationAdapter extends WebMvcConfigurerAdapter {
|
||||
|
||||
@@ -322,4 +325,24 @@ public class WebMvcAutoConfiguration {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Configuration equivalent to {@code @EnableWebMvc} but with extra
|
||||
* {@link WebMvcProperties} support.
|
||||
*/
|
||||
@Configuration
|
||||
public static class EnableWebMvcConfiguration extends DelegatingWebMvcConfiguration {
|
||||
|
||||
@Autowired(required = false)
|
||||
private WebMvcProperties mvcProperties;
|
||||
|
||||
@Bean
|
||||
@Override
|
||||
public RequestMappingHandlerAdapter requestMappingHandlerAdapter() {
|
||||
RequestMappingHandlerAdapter adapter = super.requestMappingHandlerAdapter();
|
||||
adapter.setIgnoreDefaultModelOnRedirect(this.mvcProperties == null ? true
|
||||
: this.mvcProperties.isIgnoreDefaultModelOnRedirect());
|
||||
return adapter;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,6 +43,12 @@ public class WebMvcProperties {
|
||||
*/
|
||||
private String dateFormat;
|
||||
|
||||
/**
|
||||
* If the the content of the "default" model should be ignored during redirect
|
||||
* scenarios.
|
||||
*/
|
||||
private boolean ignoreDefaultModelOnRedirect = true;
|
||||
|
||||
public DefaultMessageCodesResolver.Format getMessageCodesResolverFormat() {
|
||||
return this.messageCodesResolverFormat;
|
||||
}
|
||||
@@ -68,4 +74,11 @@ public class WebMvcProperties {
|
||||
this.dateFormat = dateFormat;
|
||||
}
|
||||
|
||||
public boolean isIgnoreDefaultModelOnRedirect() {
|
||||
return this.ignoreDefaultModelOnRedirect;
|
||||
}
|
||||
|
||||
public void setIgnoreDefaultModelOnRedirect(boolean ignoreDefaultModelOnRedirect) {
|
||||
this.ignoreDefaultModelOnRedirect = ignoreDefaultModelOnRedirect;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,6 +45,7 @@ import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.core.io.Resource;
|
||||
import org.springframework.format.support.FormattingConversionService;
|
||||
import org.springframework.mock.web.MockHttpServletRequest;
|
||||
import org.springframework.test.util.ReflectionTestUtils;
|
||||
import org.springframework.util.ReflectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.servlet.HandlerAdapter;
|
||||
@@ -279,6 +280,34 @@ public class WebMvcAutoConfigurationTests {
|
||||
return mappingLocations;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void ignoreDefaultModelOnRedirectIsTrue() throws Exception {
|
||||
this.context = new AnnotationConfigEmbeddedWebApplicationContext();
|
||||
this.context.register(Config.class, WebMvcAutoConfiguration.class,
|
||||
HttpMessageConvertersAutoConfiguration.class,
|
||||
PropertyPlaceholderAutoConfiguration.class);
|
||||
this.context.refresh();
|
||||
RequestMappingHandlerAdapter adapter = this.context
|
||||
.getBean(RequestMappingHandlerAdapter.class);
|
||||
assertEquals(true,
|
||||
ReflectionTestUtils.getField(adapter, "ignoreDefaultModelOnRedirect"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void overrideIgnoreDefaultModelOnRedirect() throws Exception {
|
||||
this.context = new AnnotationConfigEmbeddedWebApplicationContext();
|
||||
EnvironmentTestUtils.addEnvironment(this.context,
|
||||
"spring.mvc.ignore-default-model-on-redirect:false");
|
||||
this.context.register(Config.class, WebMvcAutoConfiguration.class,
|
||||
HttpMessageConvertersAutoConfiguration.class,
|
||||
PropertyPlaceholderAutoConfiguration.class);
|
||||
this.context.refresh();
|
||||
RequestMappingHandlerAdapter adapter = this.context
|
||||
.getBean(RequestMappingHandlerAdapter.class);
|
||||
assertEquals(false,
|
||||
ReflectionTestUtils.getField(adapter, "ignoreDefaultModelOnRedirect"));
|
||||
}
|
||||
|
||||
@Configuration
|
||||
protected static class ViewConfig {
|
||||
|
||||
|
||||
@@ -87,6 +87,7 @@ content into your application; rather pick only the properties that you need.
|
||||
spring.mvc.locale= # set fixed locale, e.g. en_UK
|
||||
spring.mvc.date-format= # set fixed date format, e.g. dd/MM/yyyy
|
||||
spring.mvc.message-codes-resolver-format= # PREFIX_ERROR_CODE / POSTFIX_ERROR_CODE
|
||||
spring.mvc.ignore-default-model-on-redirect=true # If the the content of the "default" model should be ignored redirects
|
||||
spring.view.prefix= # MVC view prefix
|
||||
spring.view.suffix= # ... and suffix
|
||||
spring.resources.cache-period= # cache timeouts in headers sent to browser
|
||||
|
||||
Reference in New Issue
Block a user