Add Gson converter to MVC config

Issue: SPR-9488
master
Rossen Stoyanchev 10 years ago
parent bc3ca2dea1
commit e3a6fce403
  1. 9
      spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java
  2. 9
      spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java

@ -20,6 +20,7 @@ import java.util.List;
import java.util.Properties; import java.util.Properties;
import org.springframework.web.servlet.mvc.method.annotation.JsonViewResponseBodyInterceptor; import org.springframework.web.servlet.mvc.method.annotation.JsonViewResponseBodyInterceptor;
import org.springframework.http.converter.json.GsonHttpMessageConverter;
import org.w3c.dom.Element; import org.w3c.dom.Element;
import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.FactoryBean;
@ -144,6 +145,9 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser {
ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", AnnotationDrivenBeanDefinitionParser.class.getClassLoader()) && ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", AnnotationDrivenBeanDefinitionParser.class.getClassLoader()) &&
ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", AnnotationDrivenBeanDefinitionParser.class.getClassLoader()); ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", AnnotationDrivenBeanDefinitionParser.class.getClassLoader());
private static final boolean gsonPresent =
ClassUtils.isPresent("com.google.gson.Gson", AnnotationDrivenBeanDefinitionParser.class.getClassLoader());
@Override @Override
public BeanDefinition parse(Element element, ParserContext parserContext) { public BeanDefinition parse(Element element, ParserContext parserContext) {
@ -379,7 +383,7 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser {
if (jaxb2Present) { if (jaxb2Present) {
props.put("xml", MediaType.APPLICATION_XML_VALUE); props.put("xml", MediaType.APPLICATION_XML_VALUE);
} }
if (jackson2Present) { if (jackson2Present || gsonPresent) {
props.put("json", MediaType.APPLICATION_JSON_VALUE); props.put("json", MediaType.APPLICATION_JSON_VALUE);
} }
return props; return props;
@ -493,6 +497,9 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser {
if (jackson2Present) { if (jackson2Present) {
messageConverters.add(createConverterDefinition(MappingJackson2HttpMessageConverter.class, source)); messageConverters.add(createConverterDefinition(MappingJackson2HttpMessageConverter.class, source));
} }
else if (gsonPresent) {
messageConverters.add(createConverterDefinition(GsonHttpMessageConverter.class, source));
}
} }
return messageConverters; return messageConverters;
} }

@ -44,6 +44,7 @@ import org.springframework.http.converter.ResourceHttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.feed.AtomFeedHttpMessageConverter; import org.springframework.http.converter.feed.AtomFeedHttpMessageConverter;
import org.springframework.http.converter.feed.RssChannelHttpMessageConverter; import org.springframework.http.converter.feed.RssChannelHttpMessageConverter;
import org.springframework.http.converter.json.GsonHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter; import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter;
import org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter; import org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter;
@ -159,6 +160,9 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv
ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", WebMvcConfigurationSupport.class.getClassLoader()) && ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", WebMvcConfigurationSupport.class.getClassLoader()) &&
ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", WebMvcConfigurationSupport.class.getClassLoader()); ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", WebMvcConfigurationSupport.class.getClassLoader());
private static final boolean gsonPresent =
ClassUtils.isPresent("com.google.gson.Gson", WebMvcConfigurationSupport.class.getClassLoader());
private ServletContext servletContext; private ServletContext servletContext;
@ -290,7 +294,7 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv
if (jaxb2Present) { if (jaxb2Present) {
map.put("xml", MediaType.APPLICATION_XML); map.put("xml", MediaType.APPLICATION_XML);
} }
if (jackson2Present) { if (jackson2Present || gsonPresent) {
map.put("json", MediaType.APPLICATION_JSON); map.put("json", MediaType.APPLICATION_JSON);
} }
return map; return map;
@ -605,6 +609,9 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv
if (jackson2Present) { if (jackson2Present) {
messageConverters.add(new MappingJackson2HttpMessageConverter()); messageConverters.add(new MappingJackson2HttpMessageConverter());
} }
else if (gsonPresent) {
messageConverters.add(new GsonHttpMessageConverter());
}
} }
/** /**

Loading…
Cancel
Save