From e3a6fce403901499c18b8a794be02e7b46af268b Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Thu, 22 May 2014 22:20:55 -0400 Subject: [PATCH] Add Gson converter to MVC config Issue: SPR-9488 --- .../config/AnnotationDrivenBeanDefinitionParser.java | 9 ++++++++- .../config/annotation/WebMvcConfigurationSupport.java | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java index e821530ef1..381afeefed 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java @@ -20,6 +20,7 @@ import java.util.List; import java.util.Properties; import org.springframework.web.servlet.mvc.method.annotation.JsonViewResponseBodyInterceptor; +import org.springframework.http.converter.json.GsonHttpMessageConverter; import org.w3c.dom.Element; 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.core.JsonGenerator", AnnotationDrivenBeanDefinitionParser.class.getClassLoader()); + private static final boolean gsonPresent = + ClassUtils.isPresent("com.google.gson.Gson", AnnotationDrivenBeanDefinitionParser.class.getClassLoader()); + @Override public BeanDefinition parse(Element element, ParserContext parserContext) { @@ -379,7 +383,7 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { if (jaxb2Present) { props.put("xml", MediaType.APPLICATION_XML_VALUE); } - if (jackson2Present) { + if (jackson2Present || gsonPresent) { props.put("json", MediaType.APPLICATION_JSON_VALUE); } return props; @@ -493,6 +497,9 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser { if (jackson2Present) { messageConverters.add(createConverterDefinition(MappingJackson2HttpMessageConverter.class, source)); } + else if (gsonPresent) { + messageConverters.add(createConverterDefinition(GsonHttpMessageConverter.class, source)); + } } return messageConverters; } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java index bf185ad3f8..1468502d3c 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java @@ -44,6 +44,7 @@ import org.springframework.http.converter.ResourceHttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.http.converter.feed.AtomFeedHttpMessageConverter; 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.support.AllEncompassingFormHttpMessageConverter; 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.core.JsonGenerator", WebMvcConfigurationSupport.class.getClassLoader()); + private static final boolean gsonPresent = + ClassUtils.isPresent("com.google.gson.Gson", WebMvcConfigurationSupport.class.getClassLoader()); + private ServletContext servletContext; @@ -290,7 +294,7 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv if (jaxb2Present) { map.put("xml", MediaType.APPLICATION_XML); } - if (jackson2Present) { + if (jackson2Present || gsonPresent) { map.put("json", MediaType.APPLICATION_JSON); } return map; @@ -605,6 +609,9 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv if (jackson2Present) { messageConverters.add(new MappingJackson2HttpMessageConverter()); } + else if (gsonPresent) { + messageConverters.add(new GsonHttpMessageConverter()); + } } /**