强制Spring-Boot使用Gson而不是Jackson

时间:2016-11-24 12:24:04

标签: spring-boot

Spring-Boot 1.4.2参考声明:

  

spring.http.converters.preferred-json-mapper = jackson#用于HTTP消息转换的首选JSON映射器。设置为“gson”以强制使用Gson

我们做到了。

  • 我们将gson设置为preferred-json-mapper。
  • 我们已将Gson添加为项目的依赖项。

但杰克逊仍被使用。

最后,我们设法强制Spring-Boot在排除Maven中指向杰克逊的所有传递依赖之后使用Gson。

现在的问题是。这是迫使Spring-Boot使用Gson而不是Jackson的唯一方法吗?我们真的需要排除指向杰克逊的所有传递依赖吗?首选的json-mapper设置还不够?

4 个答案:

答案 0 :(得分:1)

好吧,WebMvcConfigurerAdapter 已弃用。从 Spring 5.0 开始执行此操作:

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Bean
    public Gson gson() {
        GsonBuilder b = new GsonBuilder();
        b.registerTypeAdapterFactory(HibernateProxyTypeAdapter.FACTORY);
        b.registerTypeAdapterFactory(DateTypeAdapter.FACTORY);
        b.registerTypeAdapterFactory(TimestampTypeAdapter.FACTORY);
        b.registerTypeAdapterFactory(LocalDateTypeAdapter.FACTORY);
        b.registerTypeAdapterFactory(LocalDateTimeTypeAdapter.FACTORY);
        return b.create();
    }

    @Override
    public void configureMessageConverters(
        List<HttpMessageConverter<?>> converters) {
        StringHttpMessageConverter stringConverter = new StringHttpMessageConverter();
        stringConverter.setWriteAcceptCharset(false);
        stringConverter.setSupportedMediaTypes(Collections
            .singletonList(MediaType.TEXT_PLAIN));
        converters.add(stringConverter);
        converters.add(new ByteArrayHttpMessageConverter());
        converters.add(new SourceHttpMessageConverter<>());
        GsonHttpMessageConverter gsonHttpMessageConverter = new GsonHttpMessageConverter();
        gsonHttpMessageConverter.setGson(gson());
        gsonHttpMessageConverter.setSupportedMediaTypes(Arrays
            .asList(MediaType.APPLICATION_JSON));
        converters.add(gsonHttpMessageConverter);
    }
}

答案 1 :(得分:1)

F.e。 1)如果使用maven和名为gson的Google json,则添加其他json工件

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>${latestGsonVersion}</version>
</dependency>

2)设置

spring.http.converters.preferred-json-mapper=gson

3)例如在代码中使用它

@Autowired private Gson gson;

还有其他一些: 杰克逊图书馆(Jackson Library),Google-Gson库,JSON-lib,Flexjson,json-io,genson,JSONiJ库。

答案 2 :(得分:0)

在Spring Boot使用的部分旧* .xml配置中,我们遇到了<mvc:annotation-driven/>

第二次使用没有GsonHttpMessageConverter的默认转换器创建了RequestMappingHandlerAdapter。

答案 3 :(得分:0)

查看 Spring 源代码。您必须从依赖项中排除 function (iteratee) { const uniquePrimitives = new Set(); return this.filter((item) => { const prim = iteratee(item); if (!uniquePrimitives.has(prim)) { uniquePrimitives.add(prim); return true; } }); } 。我找不到 Jackson 的使用位置。

https://github.com/spring-projects/spring-boot/issues/7518

spring.http.converters.preferred-json-mapper