|
|
|
|
@@ -19,6 +19,7 @@ package org.springframework.web.servlet.config;
|
|
|
|
|
import static org.junit.Assert.assertEquals;
|
|
|
|
|
import static org.junit.Assert.assertFalse;
|
|
|
|
|
import static org.junit.Assert.assertNotNull;
|
|
|
|
|
import static org.junit.Assert.assertNull;
|
|
|
|
|
import static org.junit.Assert.assertTrue;
|
|
|
|
|
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
@@ -34,7 +35,6 @@ import org.springframework.context.i18n.LocaleContextHolder;
|
|
|
|
|
import org.springframework.core.convert.ConversionFailedException;
|
|
|
|
|
import org.springframework.core.convert.ConversionService;
|
|
|
|
|
import org.springframework.core.io.ClassPathResource;
|
|
|
|
|
import org.springframework.core.style.StylerUtils;
|
|
|
|
|
import org.springframework.format.annotation.DateTimeFormat;
|
|
|
|
|
import org.springframework.format.annotation.DateTimeFormat.ISO;
|
|
|
|
|
import org.springframework.format.support.FormattingConversionServiceFactoryBean;
|
|
|
|
|
@@ -50,7 +50,10 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
|
|
import org.springframework.web.bind.annotation.RequestParam;
|
|
|
|
|
import org.springframework.web.context.support.GenericWebApplicationContext;
|
|
|
|
|
import org.springframework.web.servlet.HandlerExecutionChain;
|
|
|
|
|
import org.springframework.web.servlet.ModelAndView;
|
|
|
|
|
import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping;
|
|
|
|
|
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
|
|
|
|
|
import org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter;
|
|
|
|
|
import org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter;
|
|
|
|
|
import org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping;
|
|
|
|
|
import org.springframework.web.servlet.theme.ThemeChangeInterceptor;
|
|
|
|
|
@@ -79,6 +82,7 @@ public class MvcNamespaceTests {
|
|
|
|
|
DefaultAnnotationHandlerMapping mapping = container.getBean(DefaultAnnotationHandlerMapping.class);
|
|
|
|
|
assertNotNull(mapping);
|
|
|
|
|
assertEquals(0, mapping.getOrder());
|
|
|
|
|
|
|
|
|
|
AnnotationMethodHandlerAdapter adapter = container.getBean(AnnotationMethodHandlerAdapter.class);
|
|
|
|
|
assertNotNull(adapter);
|
|
|
|
|
assertNotNull(container.getBean(FormattingConversionServiceFactoryBean.class));
|
|
|
|
|
@@ -103,12 +107,8 @@ public class MvcNamespaceTests {
|
|
|
|
|
assertEquals(4, container.getBeanDefinitionCount());
|
|
|
|
|
container.refresh();
|
|
|
|
|
|
|
|
|
|
DefaultAnnotationHandlerMapping mapping = container.getBean(DefaultAnnotationHandlerMapping.class);
|
|
|
|
|
assertNotNull(mapping);
|
|
|
|
|
assertEquals(0, mapping.getOrder());
|
|
|
|
|
AnnotationMethodHandlerAdapter adapter = container.getBean(AnnotationMethodHandlerAdapter.class);
|
|
|
|
|
assertNotNull(adapter);
|
|
|
|
|
assertNotNull(container.getBean(LocalValidatorFactoryBean.class));
|
|
|
|
|
|
|
|
|
|
TestController handler = new TestController();
|
|
|
|
|
|
|
|
|
|
@@ -126,12 +126,8 @@ public class MvcNamespaceTests {
|
|
|
|
|
assertEquals(4, container.getBeanDefinitionCount());
|
|
|
|
|
container.refresh();
|
|
|
|
|
|
|
|
|
|
DefaultAnnotationHandlerMapping mapping = container.getBean(DefaultAnnotationHandlerMapping.class);
|
|
|
|
|
assertNotNull(mapping);
|
|
|
|
|
assertEquals(0, mapping.getOrder());
|
|
|
|
|
AnnotationMethodHandlerAdapter adapter = container.getBean(AnnotationMethodHandlerAdapter.class);
|
|
|
|
|
assertNotNull(adapter);
|
|
|
|
|
assertNotNull(container.getBean(FormattingConversionServiceFactoryBean.class));
|
|
|
|
|
|
|
|
|
|
TestController handler = new TestController();
|
|
|
|
|
|
|
|
|
|
@@ -149,12 +145,13 @@ public class MvcNamespaceTests {
|
|
|
|
|
public void testInterceptors() throws Exception {
|
|
|
|
|
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(container);
|
|
|
|
|
reader.loadBeanDefinitions(new ClassPathResource("mvc-config-interceptors.xml", getClass()));
|
|
|
|
|
assertEquals(4, container.getBeanDefinitionCount());
|
|
|
|
|
assertEquals(6, container.getBeanDefinitionCount());
|
|
|
|
|
container.refresh();
|
|
|
|
|
|
|
|
|
|
DefaultAnnotationHandlerMapping mapping = container.getBean(DefaultAnnotationHandlerMapping.class);
|
|
|
|
|
assertNotNull(mapping);
|
|
|
|
|
mapping.setRootHandler(new TestController());
|
|
|
|
|
mapping.setDefaultHandler(new TestController());
|
|
|
|
|
|
|
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest();
|
|
|
|
|
request.addParameter("locale", "en");
|
|
|
|
|
request.addParameter("theme", "green");
|
|
|
|
|
@@ -165,6 +162,65 @@ public class MvcNamespaceTests {
|
|
|
|
|
assertTrue(chain.getInterceptors()[2] instanceof ThemeChangeInterceptor);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testBeanDecoration() throws Exception {
|
|
|
|
|
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(container);
|
|
|
|
|
reader.loadBeanDefinitions(new ClassPathResource("mvc-config-bean-decoration.xml", getClass()));
|
|
|
|
|
assertEquals(5, container.getBeanDefinitionCount());
|
|
|
|
|
container.refresh();
|
|
|
|
|
|
|
|
|
|
DefaultAnnotationHandlerMapping mapping = container.getBean(DefaultAnnotationHandlerMapping.class);
|
|
|
|
|
assertNotNull(mapping);
|
|
|
|
|
mapping.setDefaultHandler(new TestController());
|
|
|
|
|
|
|
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest();
|
|
|
|
|
|
|
|
|
|
HandlerExecutionChain chain = mapping.getHandler(request);
|
|
|
|
|
assertEquals(2, chain.getInterceptors().length);
|
|
|
|
|
assertTrue(chain.getInterceptors()[1] instanceof LocaleChangeInterceptor);
|
|
|
|
|
LocaleChangeInterceptor interceptor = (LocaleChangeInterceptor) chain.getInterceptors()[1];
|
|
|
|
|
assertEquals("lang", interceptor.getParamName());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testViewControllers() throws Exception {
|
|
|
|
|
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(container);
|
|
|
|
|
reader.loadBeanDefinitions(new ClassPathResource("mvc-config-view-controllers.xml", getClass()));
|
|
|
|
|
assertEquals(8, container.getBeanDefinitionCount());
|
|
|
|
|
container.refresh();
|
|
|
|
|
|
|
|
|
|
DefaultAnnotationHandlerMapping mapping = container.getBean(DefaultAnnotationHandlerMapping.class);
|
|
|
|
|
assertNotNull(mapping);
|
|
|
|
|
mapping.setDefaultHandler(new TestController());
|
|
|
|
|
|
|
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest();
|
|
|
|
|
|
|
|
|
|
HandlerExecutionChain chain = mapping.getHandler(request);
|
|
|
|
|
assertEquals(3, chain.getInterceptors().length);
|
|
|
|
|
assertTrue(chain.getInterceptors()[1] instanceof LocaleChangeInterceptor);
|
|
|
|
|
|
|
|
|
|
SimpleUrlHandlerMapping mapping2 = container.getBean(SimpleUrlHandlerMapping.class);
|
|
|
|
|
assertNotNull(mapping2);
|
|
|
|
|
|
|
|
|
|
SimpleControllerHandlerAdapter adapter = container.getBean(SimpleControllerHandlerAdapter.class);
|
|
|
|
|
assertNotNull(adapter);
|
|
|
|
|
|
|
|
|
|
request.setRequestURI("/foo");
|
|
|
|
|
request.setMethod("GET");
|
|
|
|
|
chain = mapping2.getHandler(request);
|
|
|
|
|
assertEquals(3, chain.getInterceptors().length);
|
|
|
|
|
assertTrue(chain.getInterceptors()[1] instanceof LocaleChangeInterceptor);
|
|
|
|
|
ModelAndView mv = adapter.handle(request, new MockHttpServletResponse(), chain.getHandler());
|
|
|
|
|
assertNull(mv.getViewName());
|
|
|
|
|
|
|
|
|
|
request.setRequestURI("/bar");
|
|
|
|
|
chain = mapping2.getHandler(request);
|
|
|
|
|
assertEquals(3, chain.getInterceptors().length);
|
|
|
|
|
assertTrue(chain.getInterceptors()[1] instanceof LocaleChangeInterceptor);
|
|
|
|
|
ModelAndView mv2 = adapter.handle(request, new MockHttpServletResponse(), chain.getHandler());
|
|
|
|
|
assertEquals("baz", mv2.getViewName());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Controller
|
|
|
|
|
public static class TestController {
|
|
|
|
|
|
|
|
|
|
|