Merge pull request #40874 from rohitp-a

* gh-40874:
  Polish "Make it easier to override RequestToViewNameTranslator bean"
  Make it easier to override RequestToViewNameTranslator bean

Closes gh-40874
This commit is contained in:
Andy Wilkinson 2024-06-27 15:48:00 +01:00
commit 4f6860f2fd
2 changed files with 39 additions and 0 deletions

View File

@ -95,6 +95,7 @@ import org.springframework.web.servlet.DispatcherServlet;
import org.springframework.web.servlet.FlashMapManager;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.RequestToViewNameTranslator;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.AsyncSupportConfigurer;
@ -469,6 +470,13 @@ public class WebMvcAutoConfiguration {
return super.flashMapManager();
}
@Override
@Bean
@ConditionalOnMissingBean(name = DispatcherServlet.REQUEST_TO_VIEW_NAME_TRANSLATOR_BEAN_NAME)
public RequestToViewNameTranslator viewNameTranslator() {
return super.viewNameTranslator();
}
private Resource getIndexHtmlResource() {
for (String location : this.resourceProperties.getStaticLocations()) {
Resource indexHtml = getIndexHtmlResource(location);

View File

@ -102,6 +102,7 @@ import org.springframework.web.servlet.HandlerAdapter;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.RequestToViewNameTranslator;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.AsyncSupportConfigurer;
@ -136,6 +137,7 @@ import org.springframework.web.servlet.support.AbstractFlashMapManager;
import org.springframework.web.servlet.support.SessionFlashMapManager;
import org.springframework.web.servlet.view.AbstractView;
import org.springframework.web.servlet.view.ContentNegotiatingViewResolver;
import org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator;
import org.springframework.web.util.UrlPathHelper;
import static org.assertj.core.api.Assertions.assertThat;
@ -404,6 +406,26 @@ class WebMvcAutoConfigurationTests {
});
}
@Test
void customViewNameTranslatorWithMatchingNameReplacesDefaultViewNameTranslator() {
this.contextRunner.withBean("viewNameTranslator", CustomViewNameTranslator.class, CustomViewNameTranslator::new)
.run((context) -> {
assertThat(context).hasSingleBean(RequestToViewNameTranslator.class);
assertThat(context.getBean("viewNameTranslator")).isInstanceOf(CustomViewNameTranslator.class);
});
}
@Test
void customViewNameTranslatorWithDifferentNameDoesNotReplaceDefaultViewNameTranslator() {
this.contextRunner
.withBean("customViewNameTranslator", CustomViewNameTranslator.class, CustomViewNameTranslator::new)
.run((context) -> {
assertThat(context.getBean("customViewNameTranslator")).isInstanceOf(CustomViewNameTranslator.class);
assertThat(context.getBean("viewNameTranslator"))
.isInstanceOf(DefaultRequestToViewNameTranslator.class);
});
}
@Test
void defaultDateFormat() {
this.contextRunner.run((context) -> {
@ -1458,6 +1480,15 @@ class WebMvcAutoConfigurationTests {
}
static class CustomViewNameTranslator implements RequestToViewNameTranslator {
@Override
public String getViewName(HttpServletRequest requestAttributes) {
return null;
}
}
@Configuration(proxyBeanMethods = false)
static class ResourceHandlersWithChildAndParentContextConfiguration {