Spring-Boot 1.4.2参考声明:
spring.http.converters.preferred-json-mapper = jackson#用于HTTP消息转换的首选JSON映射器。设置为“gson”以强制使用Gson
我们做到了。
但杰克逊仍被使用。
最后,我们设法强制Spring-Boot在排除Maven中指向杰克逊的所有传递依赖之后使用Gson。
现在的问题是。这是迫使Spring-Boot使用Gson而不是Jackson的唯一方法吗?我们真的需要排除指向杰克逊的所有传递依赖吗?首选的json-mapper设置还不够?
答案 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