Polishing
This commit is contained in:
@@ -148,8 +148,9 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser {
|
||||
|
||||
public static final String CONTENT_NEGOTIATION_MANAGER_BEAN_NAME = "mvcContentNegotiationManager";
|
||||
|
||||
private static final boolean javaxValidationPresent = ClassUtils.isPresent(
|
||||
"javax.validation.Validator", AnnotationDrivenBeanDefinitionParser.class.getClassLoader());
|
||||
private static final boolean javaxValidationPresent =
|
||||
ClassUtils.isPresent("javax.validation.Validator", AnnotationDrivenBeanDefinitionParser.class.getClassLoader());
|
||||
|
||||
private static boolean romePresent =
|
||||
ClassUtils.isPresent("com.rometools.rome.feed.WireFeed", AnnotationDrivenBeanDefinitionParser.class.getClassLoader());
|
||||
|
||||
@@ -532,12 +533,14 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser {
|
||||
messageConverters.add(createConverterDefinition(AtomFeedHttpMessageConverter.class, source));
|
||||
messageConverters.add(createConverterDefinition(RssChannelHttpMessageConverter.class, source));
|
||||
}
|
||||
if(jackson2XmlPresent) {
|
||||
|
||||
if (jackson2XmlPresent) {
|
||||
messageConverters.add(createConverterDefinition(MappingJackson2XmlHttpMessageConverter.class, source));
|
||||
}
|
||||
else if (jaxb2Present) {
|
||||
messageConverters.add(createConverterDefinition(Jaxb2RootElementHttpMessageConverter.class, source));
|
||||
}
|
||||
|
||||
if (jackson2Present) {
|
||||
messageConverters.add(createConverterDefinition(MappingJackson2HttpMessageConverter.class, source));
|
||||
}
|
||||
|
||||
@@ -51,8 +51,8 @@ import org.springframework.web.servlet.resource.VersionResourceResolver;
|
||||
* {@link org.springframework.beans.factory.xml.BeanDefinitionParser} that parses a
|
||||
* {@code resources} element to register a {@link ResourceHttpRequestHandler} and
|
||||
* register a {@link SimpleUrlHandlerMapping} for mapping resource requests,
|
||||
* and a {@link HttpRequestHandlerAdapter}.
|
||||
* Will also create a resource handling chain with {@link ResourceResolver}s and {@link ResourceTransformer}s.
|
||||
* and a {@link HttpRequestHandlerAdapter}. Will also create a resource handling
|
||||
* chain with {@link ResourceResolver}s and {@link ResourceTransformer}s.
|
||||
*
|
||||
* @author Keith Donald
|
||||
* @author Jeremy Grelle
|
||||
@@ -62,11 +62,16 @@ import org.springframework.web.servlet.resource.VersionResourceResolver;
|
||||
class ResourcesBeanDefinitionParser implements BeanDefinitionParser {
|
||||
|
||||
private static final String RESOURCE_CHAIN_CACHE = "spring-resource-chain-cache";
|
||||
|
||||
private static final String VERSION_RESOLVER_ELEMENT = "version-resolver";
|
||||
|
||||
private static final String VERSION_STRATEGY_ELEMENT = "version-strategy";
|
||||
|
||||
private static final String FIXED_VERSION_STRATEGY_ELEMENT = "fixed-version-strategy";
|
||||
|
||||
private static final String CONTENT_VERSION_STRATEGY_ELEMENT = "content-version-strategy";
|
||||
|
||||
|
||||
@Override
|
||||
public BeanDefinition parse(Element element, ParserContext parserContext) {
|
||||
Object source = parserContext.extractSource(element);
|
||||
@@ -129,7 +134,7 @@ class ResourcesBeanDefinitionParser implements BeanDefinitionParser {
|
||||
}
|
||||
|
||||
Element resourceChainElement = DomUtils.getChildElementByTagName(element, "resource-chain");
|
||||
if(resourceChainElement != null) {
|
||||
if (resourceChainElement != null) {
|
||||
parseResourceChain(resourceHandlerDef, parserContext, resourceChainElement, source);
|
||||
}
|
||||
|
||||
@@ -152,8 +157,8 @@ class ResourcesBeanDefinitionParser implements BeanDefinitionParser {
|
||||
resourceTransformers.setSource(source);
|
||||
|
||||
parseResourceCache(resourceResolvers, resourceTransformers, element, source);
|
||||
parseResourceResolversTransformers(isAutoRegistration, resourceResolvers
|
||||
, resourceTransformers, parserContext, element, source);
|
||||
parseResourceResolversTransformers(isAutoRegistration, resourceResolvers, resourceTransformers,
|
||||
parserContext, element, source);
|
||||
|
||||
if (!resourceResolvers.isEmpty()) {
|
||||
resourceHandlerDef.getPropertyValues().add("resourceResolvers", resourceResolvers);
|
||||
@@ -164,11 +169,10 @@ class ResourcesBeanDefinitionParser implements BeanDefinitionParser {
|
||||
}
|
||||
|
||||
private void parseResourceCache(ManagedList<? super Object> resourceResolvers,
|
||||
ManagedList<? super Object> resourceTransformers,
|
||||
Element element, Object source) {
|
||||
ManagedList<? super Object> resourceTransformers, Element element, Object source) {
|
||||
|
||||
Element resourceCacheElement = DomUtils.getChildElementByTagName(element, "resource-cache");
|
||||
if(resourceCacheElement != null) {
|
||||
if (resourceCacheElement != null) {
|
||||
ConstructorArgumentValues cavs = new ConstructorArgumentValues();
|
||||
|
||||
RootBeanDefinition cachingResolverDef = new RootBeanDefinition(CachingResourceResolver.class);
|
||||
@@ -191,7 +195,6 @@ class ResourcesBeanDefinitionParser implements BeanDefinitionParser {
|
||||
else {
|
||||
ConstructorArgumentValues cacheCavs = new ConstructorArgumentValues();
|
||||
cacheCavs.addIndexedArgumentValue(0, RESOURCE_CHAIN_CACHE);
|
||||
|
||||
RootBeanDefinition cacheDef = new RootBeanDefinition(ConcurrentMapCache.class);
|
||||
cacheDef.setSource(source);
|
||||
cacheDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
@@ -211,25 +214,25 @@ class ResourcesBeanDefinitionParser implements BeanDefinitionParser {
|
||||
Element resolversElement = DomUtils.getChildElementByTagName(element, "resolvers");
|
||||
if (resolversElement != null) {
|
||||
for (Element beanElement : DomUtils.getChildElements(resolversElement)) {
|
||||
if(VERSION_RESOLVER_ELEMENT.equals(beanElement.getLocalName())) {
|
||||
if (VERSION_RESOLVER_ELEMENT.equals(beanElement.getLocalName())) {
|
||||
RootBeanDefinition versionResolverDef = parseVersionResolver(parserContext, beanElement, source);
|
||||
versionResolverDef.setSource(source);
|
||||
resourceResolvers.add(versionResolverDef);
|
||||
|
||||
if(isAutoRegistration) {
|
||||
if (isAutoRegistration) {
|
||||
RootBeanDefinition cssLinkTransformerDef = new RootBeanDefinition(CssLinkResourceTransformer.class);
|
||||
cssLinkTransformerDef.setSource(source);
|
||||
cssLinkTransformerDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
resourceTransformers.add(cssLinkTransformerDef);
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
Object object = parserContext.getDelegate().parsePropertySubElement(beanElement, null);
|
||||
resourceResolvers.add(object);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(isAutoRegistration) {
|
||||
if (isAutoRegistration) {
|
||||
RootBeanDefinition pathResolverDef = new RootBeanDefinition(PathResourceResolver.class);
|
||||
pathResolverDef.setSource(source);
|
||||
pathResolverDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
|
||||
@@ -256,7 +259,7 @@ class ResourcesBeanDefinitionParser implements BeanDefinitionParser {
|
||||
for (Element beanElement : DomUtils.getChildElements(element)) {
|
||||
String[] patterns = StringUtils.commaDelimitedListToStringArray(beanElement.getAttribute("patterns"));
|
||||
Object strategy = null;
|
||||
if(FIXED_VERSION_STRATEGY_ELEMENT.equals(beanElement.getLocalName())) {
|
||||
if (FIXED_VERSION_STRATEGY_ELEMENT.equals(beanElement.getLocalName())) {
|
||||
ConstructorArgumentValues cavs = new ConstructorArgumentValues();
|
||||
cavs.addIndexedArgumentValue(0, beanElement.getAttribute("version"));
|
||||
RootBeanDefinition strategyDef = new RootBeanDefinition(FixedVersionStrategy.class);
|
||||
@@ -282,4 +285,5 @@ class ResourcesBeanDefinitionParser implements BeanDefinitionParser {
|
||||
|
||||
return versionResolverDef;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -66,7 +66,10 @@ import org.springframework.web.context.ServletContextAware;
|
||||
import org.springframework.web.method.support.CompositeUriComponentsContributor;
|
||||
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
|
||||
import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
|
||||
import org.springframework.web.servlet.*;
|
||||
import org.springframework.web.servlet.HandlerAdapter;
|
||||
import org.springframework.web.servlet.HandlerExceptionResolver;
|
||||
import org.springframework.web.servlet.HandlerMapping;
|
||||
import org.springframework.web.servlet.ViewResolver;
|
||||
import org.springframework.web.servlet.handler.AbstractHandlerMapping;
|
||||
import org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping;
|
||||
import org.springframework.web.servlet.handler.ConversionServiceExposingInterceptor;
|
||||
@@ -657,12 +660,14 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv
|
||||
messageConverters.add(new AtomFeedHttpMessageConverter());
|
||||
messageConverters.add(new RssChannelHttpMessageConverter());
|
||||
}
|
||||
if(jackson2XmlPresent) {
|
||||
|
||||
if (jackson2XmlPresent) {
|
||||
messageConverters.add(new MappingJackson2XmlHttpMessageConverter());
|
||||
}
|
||||
else if (jaxb2Present) {
|
||||
messageConverters.add(new Jaxb2RootElementHttpMessageConverter());
|
||||
}
|
||||
|
||||
if (jackson2Present) {
|
||||
messageConverters.add(new MappingJackson2HttpMessageConverter());
|
||||
}
|
||||
|
||||
@@ -41,10 +41,8 @@ public interface HandlerMethodMappingNamingStrategy<T> {
|
||||
|
||||
/**
|
||||
* Determine the name for the given HandlerMethod and mapping.
|
||||
*
|
||||
* @param handlerMethod the handler method
|
||||
* @param mapping the mapping
|
||||
*
|
||||
* @return the name
|
||||
*/
|
||||
String getName(HandlerMethod handlerMethod, T mapping);
|
||||
|
||||
@@ -81,15 +81,12 @@ public class ParameterizableViewController extends AbstractController {
|
||||
/**
|
||||
* Configure the HTTP status code that this controller should set on the
|
||||
* response.
|
||||
*
|
||||
* <p>When a "redirect:" prefixed view name is configured, there is no need
|
||||
* to set this property since RedirectView will do that. However this property
|
||||
* may still be used to override the 3xx status code of {@code RedirectView}.
|
||||
* For full control over redirecting provide a {@code RedirectView} instance.
|
||||
*
|
||||
* <p>If the status code is 204 and no view is configured, the request is
|
||||
* fully handled within the controller.
|
||||
*
|
||||
* @since 4.1
|
||||
*/
|
||||
public void setStatusCode(HttpStatus statusCode) {
|
||||
@@ -123,12 +120,11 @@ public class ParameterizableViewController extends AbstractController {
|
||||
return this.statusOnly;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return a ModelAndView object with the specified view name.
|
||||
*
|
||||
* <p>The content of the {@link RequestContextUtils#getInputFlashMap
|
||||
* "input" FlashMap} is also added to the model.
|
||||
*
|
||||
* @see #getViewName()
|
||||
*/
|
||||
@Override
|
||||
|
||||
@@ -28,7 +28,6 @@ import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
@@ -382,10 +381,8 @@ public class RedirectView extends AbstractUrlBasedView implements SmartView {
|
||||
* @since 4.1
|
||||
*/
|
||||
protected void appendCurrentQueryParams(StringBuilder targetUrl, HttpServletRequest request) {
|
||||
|
||||
String query = request.getQueryString();
|
||||
if (StringUtils.hasText(query)) {
|
||||
|
||||
// Extract anchor fragment, if any.
|
||||
String fragment = null;
|
||||
int anchorIndex = targetUrl.indexOf("#");
|
||||
@@ -400,7 +397,6 @@ public class RedirectView extends AbstractUrlBasedView implements SmartView {
|
||||
else {
|
||||
targetUrl.append('&').append(query);
|
||||
}
|
||||
|
||||
// Append anchor fragment, if any, to end of URL.
|
||||
if (fragment != null) {
|
||||
targetUrl.append(fragment);
|
||||
|
||||
@@ -16,6 +16,12 @@
|
||||
|
||||
package org.springframework.web.servlet.view;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import javax.servlet.ServletContext;
|
||||
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
@@ -26,12 +32,6 @@ import org.springframework.web.context.ServletContextAware;
|
||||
import org.springframework.web.servlet.View;
|
||||
import org.springframework.web.servlet.ViewResolver;
|
||||
|
||||
import javax.servlet.ServletContext;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
* A {@link org.springframework.web.servlet.ViewResolver} that delegates to others.
|
||||
*
|
||||
|
||||
@@ -82,6 +82,7 @@ public class MappingJackson2JsonView extends AbstractJackson2View {
|
||||
super(new ObjectMapper(), DEFAULT_CONTENT_TYPE);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Specify a custom prefix to use for this view's JSON output.
|
||||
* Default is none.
|
||||
@@ -207,9 +208,10 @@ public class MappingJackson2JsonView extends AbstractJackson2View {
|
||||
Object value = super.filterAndWrapModel(model, request);
|
||||
String jsonpParameterValue = getJsonpParameterValue(request);
|
||||
if (jsonpParameterValue != null) {
|
||||
if(value instanceof MappingJacksonValue) {
|
||||
if (value instanceof MappingJacksonValue) {
|
||||
((MappingJacksonValue) value).setJsonpFunction(jsonpParameterValue);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
MappingJacksonValue container = new MappingJacksonValue(value);
|
||||
container.setJsonpFunction(jsonpParameterValue);
|
||||
value = container;
|
||||
|
||||
@@ -50,6 +50,7 @@ public class MappingJackson2XmlView extends AbstractJackson2View {
|
||||
super(new XmlMapper(), DEFAULT_CONTENT_TYPE);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@@ -73,11 +74,11 @@ public class MappingJackson2XmlView extends AbstractJackson2View {
|
||||
throw new IllegalStateException(
|
||||
"Model contains no object with key [" + this.modelKey + "]");
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
for (Map.Entry<String, Object> entry : model.entrySet()) {
|
||||
if (!(entry.getValue() instanceof BindingResult) &&
|
||||
!entry.getKey().equals(JsonView.class.getName())) {
|
||||
if(value != null) {
|
||||
if (!(entry.getValue() instanceof BindingResult) && !entry.getKey().equals(JsonView.class.getName())) {
|
||||
if (value != null) {
|
||||
throw new IllegalStateException("Model contains more than one object to render, only one is supported");
|
||||
}
|
||||
value = entry.getValue();
|
||||
@@ -87,4 +88,4 @@ public class MappingJackson2XmlView extends AbstractJackson2View {
|
||||
return value;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user