当前位置: 首页 > 知识库问答 >
问题:

强制Spring Boot使用Gson而不是Jackson

桂学
2023-03-14

Spring Boot 1.4.2参考声明:

Springhttp。转换器。首选json映射器=jackson#用于HTTP消息转换的首选json映射器。设置为“gson”以强制使用gson

我们做到了。

  • 我们为首选json映射器设置了gson

但杰克逊还是被利用了。

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

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

共有3个答案

姜凯风
2023-03-14

这件事发生在我们过去的生活中。Spring Boot使用的xml配置

这导致第二次使用默认转换器创建RequestMappingHandlerAdapter,而不使用GsonHttpMessageConverter。

周洋
2023-03-14

F.e.1)添加其他json工件,如果使用maven和名为gson的google 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;

还有其他的:杰克逊图书馆,谷歌Gson图书馆,JSON-lib,Flexjson,json-io,genson,JSONiJ图书馆。

谭敏学
2023-03-14

嗯,WebMVCConfigureAdapter已被弃用。从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);
    }
}
 类似资料:
  • 我的eclipse安装始终使用https协议下载存储库结构。问题是我的合作代理不允许我在这个url上使用https。如何强制m2e使用http? 我尝试了m2e的不同外部maven安装,但没有成功。只有在使用CLI中的外部maven(使用http)时,它才起作用。

  • 我正在尝试构建react原生android应用程序,作为一种依赖,我看到我有gradle,但它无法在构建时加载。错误消息: 问题很明显,我坐在公司代理后面,阻止任何像这样的错误HTTPS连接。所以我的问题是:如何强制gradle使用HTTP加载这些文件?这些属性应该放在哪里(哪一个gradle文件,即gradle.properties)? P. S.我已经在gradle属性文件中设置了这些: 任何

  • 我试图使用Gson发送JsonObjects作为响应。这些JsonObjects是手工构造的,而不是使用objectMapper或GSON。我排除了所有与杰克逊有关的依赖关系。它工作得很好很好。后来,我尝试使用SpringFox添加Swagger文档。现在它抛出以下异常:

  • 我花了过去的一天,试图找到一个解决办法,但没有找到任何在线资源,解决了这个问题。 我使用Gson为我的应用程序进行消息转换,它在单元测试之外工作得很好。我甚至添加了bean以优先于Jackson而不是将配置值写入。这只在运行应用程序时起作用。 现在我的问题是,如何使用的Gson序列化/反序列化?我有一个带有批注的类,它的值与实际名称不同。我最接近找到答案的是下面的一个,但没有任何帮助: https

  • 当我设置json accept header时,得到的是json。我需要强制我的授权服务器始终发送JSON。还没找到任何解决办法。谢了。

  • 问题内容: 我正在使用Gson对此类进行序列化和反序列化。今天,我不得不在此对象中添加最终的UUID。我没有序列化的问题。我需要强制gson 在反序列化时使用构造函数。我该如何实现? 问题答案: 您可以实现一个自定义的JsonDeserializer并将其注册到GSON。 请记住,此代码尚未经过测试。