注册GsonHttpMessageConverter代替MappingJackson2HttpMessageConverter。

问题描述 投票:0回答:1

我创建了这个类来添加GSON到spring-boot classpath。问题是,由于没有一个有效的转换器,我无法查看任何Htmltext或图片内容。

我对Spring-Boot比较陌生。

我想在spring-boot中添加Gson而不是Jackson,并且能够使用chrome浏览网页应用。

这是我的类。

@Configuration
@EnableWebMvc
public class GsonSpringBootConfigurer implements WebMvcConfigurer {


    private static final Logger log = LoggerFactory.getLogger(SyncController.class);

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {

        for(HttpMessageConverter httpMessageConverter : converters){
           log.info(httpMessageConverter.toString());
        }
        converters.add(createGsonHttpMessageConverter());

    }

    private GsonHttpMessageConverter createGsonHttpMessageConverter() {
        Gson gson = JsonUtils.getGsonBuilder();
        GsonHttpMessageConverter converter = new GsonHttpMessageConverter();
        converter.setGson(gson);
        return converter;
    }
}
java spring-boot spring-mvc jackson gson
1个回答
2
投票

请注意以下Javadoc configureMessageConverters

配置 HttpMessageConverter用于读写请求或响应的主体。如果没有添加转换器,则会注册一个默认的转换器列表。

请注意,向列表中添加转换器。关闭默认的转换器注册. 要在不影响默认注册的情况下简单地添加一个转换器,请考虑使用以下方法 extendMessageConverters(java.util.List) 来代替。

换句话说,你已经删除了所有处理其他内容类型的转换器。

请注意,Spring MVC只注册了Jackson的 HttpMessageConverter (MappingJackson2HttpMessageConverter),如果相应的Jackson库在您的classpath中。您可以删除它们,并且,假设您的classpath中存在Gson,则可以用一个 GsonHttpMessageConverter 将为你注册。

从你的代码来看,你似乎想创建一个自定义的 GsonHttpMessageConverter. 在这种情况下,你可以按照Javadoc说明,使用 extendMessageConverters.

一个钩子,用于在配置转换器列表后对其进行扩展或修改。这可能很有用,例如,允许注册默认转换器,然后通过该方法插入一个自定义转换器。

你首先要删除现有的实例,然后添加你自己的实例。比如说

@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
    // remove the Jackson version if Jackson is still in your classpath
    converters.removeIf(converter -> converter instanceof MappingJackson2HttpMessageConverter);
    // remove the existing instance (from defaults)
    converters.removeIf(converter -> converter instanceof GsonHttpMessageConverter);
    // add your custom
    converters.add(createGsonHttpMessageConverter());
}
© www.soinside.com 2019 - 2024. All rights reserved.