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

Zie*_*zyk 9 spring-boot

Spring-Boot 1.4.2参考声明:

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

我们做到了.

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

但仍然使用杰克逊.

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

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

小智 10

嗯,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);
    }
}
Run Code Online (Sandbox Code Playgroud)


Zie*_*zyk 0

发生在 Spring Boot 使用的旧 *.xml 配置的一部分中,我们有<mvc:annotation-driven/>.

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