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中添加一個無參構造函數就可以了!

引用

https://www.cnblogs.com/yucfeng/p/8932089.html#4131391 更加詳細的介紹可以參考這個朋友的文章!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM