SpringBoot中测试Elasticsearch,在测试ElasticsearchRepository文档操作中的查询时报错org.springframework.data.elasticsearch.ElasticsearchException: failed to map source *** to class item

问题描述

在SpringBoot中测试Elasticsearch的时候,当测试ElasticsearchRepository的文档操作的时候,在调用find()查询方法时报错,错误如下

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.zmx.elasticsearch.pojo.Item` (no Creators, like default construct, exist): 
cannot deserialize from Object value (no delegate- or property-based Creator)
at [Source: (String); line: 1, column: 2]
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:67)
at com.fasterxml.jackson.databind.DeserializationContext.reportBadDefinition(DeserializationContext.java:1452)
at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1028)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1297)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:326)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:159)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4013)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3004)
at org.springframework.data.elasticsearch.core.DefaultEntityMapper.mapToObject(DefaultEntityMapper.java:82)
at org.springframework.data.elasticsearch.core.AbstractResultMapper.mapEntity(AbstractResultMapper.java:43)
... 56 more
 

原因

这是因为在实体类Item中为了方便实例化添加了一个有参构造函数,导致JVM不能添加默认的无参构造函数了,但是jackson的反序列化需要使用无参构造函数,所以报错!

解决

在实体类Item中添加一个无参构造函数就可以了!

猜你喜欢

转载自www.cnblogs.com/zmxsean/p/10065740.html