1

我的 Spring 应用程序使用 Spring-data-elasticsearch ( https://github.com/spring-projects/spring-data-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 (通过引用链: data.nosql.entities.CustomEntity ["exportJSON"]->com.google.gson.JsonObject["asString"])

我理解这个问题,但我不知道如何解决它。请问有什么想法吗?

4

1 回答 1

0

我的猜测是,杰克逊试图将你的 gson 对象转换为一个字符串,以便 ES 可以索引,但它不知道如何做到这一点。如果您发布完整的堆栈跟踪,它会更有帮助,但如果我不得不猜测,您需要在“exportJSON”对象上使用@JsonSerializer 注释。

于 2017-04-15T09:26:59.260 回答