2015-05-14 1 views
1

Приложение My Spring использует Spring-data-elasticsearch (https://github.com/spring-projects/spring-data-elasticsearch).Сохраните объект, содержащий атрибут gson для ElasticSearch весной

Я хотел бы сохранить следующий документ в базу данных elasticsearch:

@Document(indexName = "documents", type = "customEntity", replicas = 0, shards = 5) 
    public class CustomEntity implements Serializable{ 

     @Id 
     private String Id; 
     @Field(type = FieldType.String) 
     private String Field1; 
     @Field(type = FieldType.Integer) 
     private int Field2; 
     @Field(type = FieldType.Object) //not sure which annotation I should use 
     private JsonObject exportJSON; //gson object 

     ...getters and setters... 
    } 

, используя этот путь:

public class CustomEntityDao { 

    @Resource 
    ElasticsearchTemplate elasticsearchTemplate;   

    public void insertCustomEntity(CustomEntity entity){   

     IndexQuery indexQuery = new IndexQuery(); 
     indexQuery.setId(entity.getCustomEntityId()); 
     indexQuery.setObject(entity); 

     elasticsearchTemplate.index(indexQuery); //exception thrown 

    } 

} 

, но я получаю эту ошибку:

com.fasterxml.jackson.databind.JsonMappingException: JsonObject (through reference chain: data.nosql.entities.CustomEntity ["exportJSON"]->com.google.gson.JsonObject["asString"])

I понять проблему, но я не знаю, как ее решить. Любые идеи, пожалуйста?

ответ

0

Я предполагаю, что Джексон пытается скрывать ваш объект gson до строки, подлежащей индексированию ES, и он не знает, как это сделать. Если вы разместите свою полную трассировку стека, это будет более полезно, но если я должен угадать, вам нужно использовать аннотацию @JsonSerializer на вашем объекте «exportJSON».

Смежные вопросы