修改Spring Data Elasticsearch 对象序列化方式

yzmm
2786 阅读
0 评论

Spring Data Elasticsearch默认采用了Jackson作为对象序列化方式,但是为了保持Json序列化一致性就不得不修改Spring Data Elasticsearch的序列化结果了,这里讲下如何使用的是Fastjson来序列化Spring Data Elasticsearch查询出来的数据。

Spring Data Elasticsearch中,默认会调用org.springframework.data.elasticsearch.core.DefaultResultMapper来映射ElasticSearch返回的结果,而最终序列化方法在DefaultResultMapper的父类org.springframework.data.elasticsearch.core.AbstractResultMapperpublicT mapEntity(String source, Class clazz)方法,所以只需要想办法重写mapEntity方法就行了。

在Spring Boot项目中定义下自定义的ElasticsearchTemplate就可以实现自定义ResultMapper了:

java
1
2
3
4
5
6
7
8
9
10
11
12
13
@Bean("elasticsearchTemplate")
public ElasticsearchTemplate elasticsearchTemplate(Client client) {
	SimpleElasticsearchMappingContext mappingContext = new SimpleElasticsearchMappingContext();
	return new ElasticsearchTemplate(
			client,
			new MappingElasticsearchConverter(mappingContext),
			new DefaultResultMapper() {
				public <T> T mapEntity(String source, Class<T> clazz) {
					return JSON.parseObject(source, clazz);
				}
			}
	);
}

重启服务即可。

评论 (0)

发表评论