Skip to content

Commit e3a6fce

Browse files
committed
Add Gson converter to MVC config
Issue: SPR-9488
1 parent bc3ca2d commit e3a6fce

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.Properties;
2121

2222
import org.springframework.web.servlet.mvc.method.annotation.JsonViewResponseBodyInterceptor;
23+
import org.springframework.http.converter.json.GsonHttpMessageConverter;
2324
import org.w3c.dom.Element;
2425

2526
import org.springframework.beans.factory.FactoryBean;
@@ -144,6 +145,9 @@ class AnnotationDrivenBeanDefinitionParser implements BeanDefinitionParser {
144145
ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", AnnotationDrivenBeanDefinitionParser.class.getClassLoader()) &&
145146
ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", AnnotationDrivenBeanDefinitionParser.class.getClassLoader());
146147

148+
private static final boolean gsonPresent =
149+
ClassUtils.isPresent("com.google.gson.Gson", AnnotationDrivenBeanDefinitionParser.class.getClassLoader());
150+
147151

148152
@Override
149153
public BeanDefinition parse(Element element, ParserContext parserContext) {
@@ -379,7 +383,7 @@ private Properties getDefaultMediaTypes() {
379383
if (jaxb2Present) {
380384
props.put("xml", MediaType.APPLICATION_XML_VALUE);
381385
}
382-
if (jackson2Present) {
386+
if (jackson2Present || gsonPresent) {
383387
props.put("json", MediaType.APPLICATION_JSON_VALUE);
384388
}
385389
return props;
@@ -493,6 +497,9 @@ private ManagedList<?> getMessageConverters(Element element, Object source, Pars
493497
if (jackson2Present) {
494498
messageConverters.add(createConverterDefinition(MappingJackson2HttpMessageConverter.class, source));
495499
}
500+
else if (gsonPresent) {
501+
messageConverters.add(createConverterDefinition(GsonHttpMessageConverter.class, source));
502+
}
496503
}
497504
return messageConverters;
498505
}

spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import org.springframework.http.converter.StringHttpMessageConverter;
4545
import org.springframework.http.converter.feed.AtomFeedHttpMessageConverter;
4646
import org.springframework.http.converter.feed.RssChannelHttpMessageConverter;
47+
import org.springframework.http.converter.json.GsonHttpMessageConverter;
4748
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
4849
import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter;
4950
import org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter;
@@ -159,6 +160,9 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv
159160
ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", WebMvcConfigurationSupport.class.getClassLoader()) &&
160161
ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", WebMvcConfigurationSupport.class.getClassLoader());
161162

163+
private static final boolean gsonPresent =
164+
ClassUtils.isPresent("com.google.gson.Gson", WebMvcConfigurationSupport.class.getClassLoader());
165+
162166

163167
private ServletContext servletContext;
164168

@@ -290,7 +294,7 @@ protected Map<String, MediaType> getDefaultMediaTypes() {
290294
if (jaxb2Present) {
291295
map.put("xml", MediaType.APPLICATION_XML);
292296
}
293-
if (jackson2Present) {
297+
if (jackson2Present || gsonPresent) {
294298
map.put("json", MediaType.APPLICATION_JSON);
295299
}
296300
return map;
@@ -605,6 +609,9 @@ protected final void addDefaultHttpMessageConverters(List<HttpMessageConverter<?
605609
if (jackson2Present) {
606610
messageConverters.add(new MappingJackson2HttpMessageConverter());
607611
}
612+
else if (gsonPresent) {
613+
messageConverters.add(new GsonHttpMessageConverter());
614+
}
608615
}
609616

610617
/**

0 commit comments

Comments
 (0)