diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java index 77f32922fb..0eb963442a 100644 --- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java +++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java @@ -29,6 +29,7 @@ import org.springframework.beans.factory.xml.ParserContext; import org.springframework.core.convert.ConversionService; import org.springframework.format.support.FormattingConversionServiceFactoryBean; import org.springframework.http.converter.ByteArrayHttpMessageConverter; +import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.ResourceHttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.http.converter.feed.AtomFeedHttpMessageConverter; @@ -170,22 +171,35 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { private ManagedList getMessageConverters(Object source) { ManagedList messageConverters = new ManagedList(); messageConverters.setSource(source); - messageConverters.add(new RootBeanDefinition(ByteArrayHttpMessageConverter.class)); - messageConverters.add(new RootBeanDefinition(StringHttpMessageConverter.class)); - messageConverters.add(new RootBeanDefinition(ResourceHttpMessageConverter.class)); - messageConverters.add(new RootBeanDefinition(SourceHttpMessageConverter.class)); - messageConverters.add(new RootBeanDefinition(XmlAwareFormHttpMessageConverter.class)); + messageConverters.add(createConverterBeanDefinition(ByteArrayHttpMessageConverter.class, source)); + + RootBeanDefinition stringConverterDef = createConverterBeanDefinition(StringHttpMessageConverter.class, source); + stringConverterDef.getPropertyValues().add("writeAcceptCharset", false); + messageConverters.add(stringConverterDef); + + messageConverters.add(createConverterBeanDefinition(ResourceHttpMessageConverter.class, source)); + messageConverters.add(createConverterBeanDefinition(SourceHttpMessageConverter.class, source)); + messageConverters.add(createConverterBeanDefinition(XmlAwareFormHttpMessageConverter.class, source)); if (jaxb2Present) { - messageConverters.add(new RootBeanDefinition(Jaxb2RootElementHttpMessageConverter.class)); + messageConverters.add(createConverterBeanDefinition(Jaxb2RootElementHttpMessageConverter.class, source)); } if (jacksonPresent) { - messageConverters.add(new RootBeanDefinition(MappingJacksonHttpMessageConverter.class)); + messageConverters.add(createConverterBeanDefinition(MappingJacksonHttpMessageConverter.class, source)); } if (romePresent) { - messageConverters.add(new RootBeanDefinition(AtomFeedHttpMessageConverter.class)); - messageConverters.add(new RootBeanDefinition(RssChannelHttpMessageConverter.class)); + messageConverters.add(createConverterBeanDefinition(AtomFeedHttpMessageConverter.class, source)); + messageConverters.add(createConverterBeanDefinition(RssChannelHttpMessageConverter.class, source)); } return messageConverters; } + private RootBeanDefinition createConverterBeanDefinition(Class converterClass, + Object source) { + RootBeanDefinition beanDefinition = new RootBeanDefinition(converterClass); + beanDefinition.setSource(source); + beanDefinition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); + + return beanDefinition; + } + }