2016-11-24 30 views
3

彈簧引導1.4.2參考權利要求書:力彈簧-Boot的使用GSON代替傑克遜

spring.http.converters.preferred-JSON映射器=傑克遜#優選JSON映射器用於HTTP消息轉換。設置爲「gson」強制使用Gson

我們做到了。

  • 我們爲preferred-json-mapper設置了gson。
  • 我們添加了Gson作爲我們項目的依賴項。

但仍使用傑克遜。

最後,我們設法強制Spring-Boot在使用Gson之後,排除了Maven中已經指出給Jackson的所有傳遞依賴關係。

現在的問題是。是否只有這樣才能迫使Spring-Boot使用Gson而不是Jackson?我們是否真的需要排除指向傑克遜的所有傳遞性依賴?首選-json-mapper設置是不夠的?

+0

爲了避免任何浪費時間試圖回答這個問題,這裏還有爲它春天啓動的問題:https://github.com/spring-projects/spring-boot/問題/ 7518 –

回答

0

它發生在Spring Boot使用的舊的* .xml配置的一部分中,我們有<mvc:annotation-driven/>

它導致創建的RequestMappingHandlerAdapter第二次與默認轉換器沒有GsonHttpMessageConverter。

0

恩,WebMvcConfigurerAdapter已棄用。作爲春天的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); 
    } 
}