SPR-8217 update MVC namespace to use HandlerMethod infrastructure
This commit is contained in:
@@ -40,10 +40,10 @@ import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
|
||||
import org.springframework.web.bind.support.ConfigurableWebBindingInitializer;
|
||||
import org.springframework.web.servlet.handler.ConversionServiceExposingInterceptor;
|
||||
import org.springframework.web.servlet.handler.MappedInterceptor;
|
||||
import org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter;
|
||||
import org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver;
|
||||
import org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping;
|
||||
import org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMethodAdapter;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMethodExceptionResolver;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMethodMapping;
|
||||
import org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver;
|
||||
|
||||
/**
|
||||
@@ -78,11 +78,11 @@ final class MvcAnnotationDrivenExecutor extends AbstractSpecificationExecutor<Mv
|
||||
ComponentRegistrar registrar = specContext.getRegistrar();
|
||||
Object source = spec.source();
|
||||
|
||||
RootBeanDefinition annMappingDef = new RootBeanDefinition(DefaultAnnotationHandlerMapping.class);
|
||||
annMappingDef.setSource(source);
|
||||
annMappingDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
annMappingDef.getPropertyValues().add("order", 0);
|
||||
String annMappingName = registrar.registerWithGeneratedName(annMappingDef);
|
||||
RootBeanDefinition methodMappingDef = new RootBeanDefinition(RequestMappingHandlerMethodMapping.class);
|
||||
methodMappingDef.setSource(source);
|
||||
methodMappingDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
methodMappingDef.getPropertyValues().add("order", 0);
|
||||
String methodMappingName = registrar.registerWithGeneratedName(methodMappingDef);
|
||||
|
||||
Object conversionService = getConversionService(spec, registrar);
|
||||
Object validator = getValidator(spec, registrar);
|
||||
@@ -97,15 +97,15 @@ final class MvcAnnotationDrivenExecutor extends AbstractSpecificationExecutor<Mv
|
||||
|
||||
ManagedList<? super Object> messageConverters = getMessageConverters(spec, registrar);
|
||||
|
||||
RootBeanDefinition annAdapterDef = new RootBeanDefinition(AnnotationMethodHandlerAdapter.class);
|
||||
annAdapterDef.setSource(source);
|
||||
annAdapterDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
annAdapterDef.getPropertyValues().add("webBindingInitializer", bindingDef);
|
||||
annAdapterDef.getPropertyValues().add("messageConverters", messageConverters);
|
||||
RootBeanDefinition methodAdapterDef = new RootBeanDefinition(RequestMappingHandlerMethodAdapter.class);
|
||||
methodAdapterDef.setSource(source);
|
||||
methodAdapterDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
methodAdapterDef.getPropertyValues().add("webBindingInitializer", bindingDef);
|
||||
methodAdapterDef.getPropertyValues().add("messageConverters", messageConverters);
|
||||
if (!spec.argumentResolvers().isEmpty()) {
|
||||
annAdapterDef.getPropertyValues().add("customArgumentResolvers", spec.argumentResolvers());
|
||||
methodAdapterDef.getPropertyValues().add("customArgumentResolvers", spec.argumentResolvers());
|
||||
}
|
||||
String annAdapterName = registrar.registerWithGeneratedName(annAdapterDef);
|
||||
String methodAdapterName = registrar.registerWithGeneratedName(methodAdapterDef);
|
||||
|
||||
RootBeanDefinition csInterceptorDef = new RootBeanDefinition(ConversionServiceExposingInterceptor.class);
|
||||
csInterceptorDef.setSource(source);
|
||||
@@ -117,12 +117,13 @@ final class MvcAnnotationDrivenExecutor extends AbstractSpecificationExecutor<Mv
|
||||
mappedCsInterceptorDef.getConstructorArgumentValues().addIndexedArgumentValue(1, csInterceptorDef);
|
||||
String mappedInterceptorName = registrar.registerWithGeneratedName(mappedCsInterceptorDef);
|
||||
|
||||
RootBeanDefinition annExceptionResolver = new RootBeanDefinition(AnnotationMethodHandlerExceptionResolver.class);
|
||||
annExceptionResolver.setSource(source);
|
||||
annExceptionResolver.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
annExceptionResolver.getPropertyValues().add("messageConverters", messageConverters);
|
||||
annExceptionResolver.getPropertyValues().add("order", 0);
|
||||
String annExceptionResolverName = registrar.registerWithGeneratedName(annExceptionResolver);
|
||||
RootBeanDefinition methodExceptionResolver = new RootBeanDefinition(
|
||||
RequestMappingHandlerMethodExceptionResolver.class);
|
||||
methodExceptionResolver.setSource(source);
|
||||
methodExceptionResolver.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
methodExceptionResolver.getPropertyValues().add("messageConverters", messageConverters);
|
||||
methodExceptionResolver.getPropertyValues().add("order", 0);
|
||||
String methodExceptionResolverName = registrar.registerWithGeneratedName(methodExceptionResolver);
|
||||
|
||||
RootBeanDefinition responseStatusExceptionResolver = new RootBeanDefinition(
|
||||
ResponseStatusExceptionResolver.class);
|
||||
@@ -139,9 +140,9 @@ final class MvcAnnotationDrivenExecutor extends AbstractSpecificationExecutor<Mv
|
||||
String defaultExceptionResolverName = registrar.registerWithGeneratedName(defaultExceptionResolver);
|
||||
|
||||
CompositeComponentDefinition compDefinition = new CompositeComponentDefinition(spec.sourceName(), source);
|
||||
compDefinition.addNestedComponent(new BeanComponentDefinition(annMappingDef, annMappingName));
|
||||
compDefinition.addNestedComponent(new BeanComponentDefinition(annAdapterDef, annAdapterName));
|
||||
compDefinition.addNestedComponent(new BeanComponentDefinition(annExceptionResolver, annExceptionResolverName));
|
||||
compDefinition.addNestedComponent(new BeanComponentDefinition(methodMappingDef, methodMappingName));
|
||||
compDefinition.addNestedComponent(new BeanComponentDefinition(methodAdapterDef, methodAdapterName));
|
||||
compDefinition.addNestedComponent(new BeanComponentDefinition(methodExceptionResolver, methodExceptionResolverName));
|
||||
compDefinition.addNestedComponent(new BeanComponentDefinition(responseStatusExceptionResolver,
|
||||
responseStatusExceptionResolverName));
|
||||
compDefinition.addNestedComponent(new BeanComponentDefinition(defaultExceptionResolver,
|
||||
|
||||
@@ -85,6 +85,7 @@ import org.springframework.web.servlet.mvc.method.annotation.support.ServletCook
|
||||
import org.springframework.web.servlet.mvc.method.annotation.support.ServletModelAttributeMethodProcessor;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.support.ServletRequestMethodArgumentResolver;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.support.ServletResponseMethodArgumentResolver;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.support.ServletWebArgumentResolverAdapter;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.support.ViewMethodReturnValueHandler;
|
||||
import org.springframework.web.util.WebUtils;
|
||||
|
||||
@@ -185,6 +186,13 @@ public class RequestMappingHandlerMethodAdapter extends AbstractHandlerMethodAda
|
||||
this.messageConverters = messageConverters;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the message body converters that this adapter has been configured with.
|
||||
*/
|
||||
public HttpMessageConverter<?>[] getMessageConverters() {
|
||||
return messageConverters;
|
||||
}
|
||||
|
||||
/**
|
||||
* Specify a WebBindingInitializer which will apply pre-configured
|
||||
* configuration to every DataBinder that this controller uses.
|
||||
@@ -313,7 +321,7 @@ public class RequestMappingHandlerMethodAdapter extends AbstractHandlerMethodAda
|
||||
|
||||
if (customArgumentResolvers != null) {
|
||||
for (WebArgumentResolver customResolver : customArgumentResolvers) {
|
||||
argumentResolvers.registerArgumentResolver(new WebArgumentResolverAdapter(customResolver));
|
||||
argumentResolvers.registerArgumentResolver(new ServletWebArgumentResolverAdapter(customResolver));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -343,7 +351,7 @@ public class RequestMappingHandlerMethodAdapter extends AbstractHandlerMethodAda
|
||||
|
||||
if (customArgumentResolvers != null) {
|
||||
for (WebArgumentResolver customResolver : customArgumentResolvers) {
|
||||
initBinderArgumentResolvers.registerArgumentResolver(new WebArgumentResolverAdapter(customResolver));
|
||||
initBinderArgumentResolvers.registerArgumentResolver(new ServletWebArgumentResolverAdapter(customResolver));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -43,7 +43,6 @@ import org.springframework.web.method.HandlerMethodSelector;
|
||||
import org.springframework.web.method.annotation.ExceptionMethodMapping;
|
||||
import org.springframework.web.method.annotation.support.ModelAttributeMethodProcessor;
|
||||
import org.springframework.web.method.annotation.support.ModelMethodProcessor;
|
||||
import org.springframework.web.method.annotation.support.WebArgumentResolverAdapter;
|
||||
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
|
||||
import org.springframework.web.method.support.HandlerMethodArgumentResolverComposite;
|
||||
import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
|
||||
@@ -57,6 +56,7 @@ import org.springframework.web.servlet.mvc.method.annotation.support.ModelAndVie
|
||||
import org.springframework.web.servlet.mvc.method.annotation.support.RequestResponseBodyMethodProcessor;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.support.ServletRequestMethodArgumentResolver;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.support.ServletResponseMethodArgumentResolver;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.support.ServletWebArgumentResolverAdapter;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.support.ViewMethodReturnValueHandler;
|
||||
|
||||
/**
|
||||
@@ -185,7 +185,7 @@ public class RequestMappingHandlerMethodExceptionResolver extends AbstractHandle
|
||||
|
||||
if (customArgumentResolvers != null) {
|
||||
for (WebArgumentResolver customResolver : customArgumentResolvers) {
|
||||
argumentResolvers.registerArgumentResolver(new WebArgumentResolverAdapter(customResolver));
|
||||
argumentResolvers.registerArgumentResolver(new ServletWebArgumentResolverAdapter(customResolver));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,10 +42,15 @@ public class ModelAndViewMethodReturnValueHandler implements HandlerMethodReturn
|
||||
MethodParameter returnType,
|
||||
ModelAndViewContainer mavContainer,
|
||||
NativeWebRequest webRequest) throws Exception {
|
||||
ModelAndView mav = (ModelAndView) returnValue;
|
||||
mavContainer.setView(mav.getView());
|
||||
mavContainer.setViewName(mav.getViewName());
|
||||
mavContainer.addModelAttributes(mav.getModel());
|
||||
if (returnValue != null) {
|
||||
ModelAndView mav = (ModelAndView) returnValue;
|
||||
mavContainer.setView(mav.getView());
|
||||
mavContainer.setViewName(mav.getViewName());
|
||||
mavContainer.addModelAttributes(mav.getModel());
|
||||
}
|
||||
else {
|
||||
// TODO
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -43,6 +43,9 @@ public class ViewMethodReturnValueHandler implements HandlerMethodReturnValueHan
|
||||
MethodParameter returnType,
|
||||
ModelAndViewContainer mavContainer,
|
||||
NativeWebRequest webRequest) throws Exception {
|
||||
if (returnValue == null) {
|
||||
return;
|
||||
}
|
||||
if (returnValue instanceof String) {
|
||||
mavContainer.setViewName((String) returnValue);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user