- Notifications
You must be signed in to change notification settings - Fork 1.3k
Custom ObjectMapper
Peter-Josef Meisch edited this page Jan 2, 2021 · 3 revisions
ObjectMapper was removed in Spring Data Elasticsearch 4.0! |
---|
How to use custom ObjectMapper?
- Create new Class and implement Interface EntityMapper
public class CustomEntityMapper implements EntityMapper { public CustomEntityMapper(){ //custom configuration/implementation (e.g. FasterXML/jackson) } @Override public String mapToString(Object object) throws IOException { //mapping Object to String return null; } @Override public <T> T mapToObject(String source, Class<T> clazz) throws IOException { //mapping String to Object return null; } }
- Define new bean and inject it into ElasticsearchTemplate
<bean name="elasticsearchTemplate" class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate"> <constructor-arg name="client" ref="client"/> <constructor-arg name="entityMapper" ref="entityMapper"/> </bean> <bean name="entityMapper" class="org.springframework.data.elasticsearch.core.CustomEntityMapper"/>
- Inject your custom implementation to template
<?xml version="1.0" encoding="UTF-8"?> <beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch"xsi:schemaLocation="http://www.springframework.org/schema/data/elasticsearch http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"> <elasticsearch:repositoriesbase-package="com.xyz.acme"/> <elasticsearch:transport-clientid="client"cluster-nodes="localhost:9300,someip:9300" /> <beanname="elasticsearchTemplate"class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate"> <constructor-argname="client"ref="client"/> <constructor-argname="resultsMapper"ref="resultMapper"/> </bean> <beanname="entityMapper"class="org.springframework.data.elasticsearch.core.DefaultEntityMapper"/> <beanname="resultMapper"class="org.springframework.data.elasticsearch.core.CustomResultMapper"> <constructor-argref="entityMapper"/> </bean> </beans>
Default implementation for EntityMapper used in project can be found here https://github.com/spring-projects/spring-data-elasticsearch/blob/master/src/main/java/org/springframework/data/elasticsearch/core/DefaultEntityMapper.java