基于JHipster框架,整合Elasticsearch报错:java.lang.UnsupportedOperationException: JsonObject

在springboot项目中,由于整合elasticsearch选择的:

<dependency>
    <groupId>com.github.vanroy</groupId>
    <artifactId>spring-boot-starter-data-jest</artifactId>
</dependency>
version=6.3.1
groupId=io.searchbox
artifactId=jest-common

依赖,所以在查询结果的时候,会 出现如下报错:

java.lang.UnsupportedOperationException: JsonObject

    at com.google.gson.JsonElement.getAsLong(JsonElement.java:218)
    at io.searchbox.core.SearchResult.getTotal(SearchResult.java:218)
    at com.github.vanroy.springdata.jest.mapper.DefaultJestResultsMapper.mapResults(DefaultJestResultsMapper.java:122)
    at com.github.vanroy.springdata.jest.JestElasticsearchTemplate.queryForPage(JestElasticsearchTemplate.java:415)
    at com.github.vanroy.springdata.jest.JestElasticsearchTemplate.queryForPage(JestElasticsearchTemplate.java:405)

依旧是百度无果,所以还是只能靠自己看源码解决错误,通过debugger调试,找到出错的最终代码,并定位了其所在类:io.searchbox.core.SearchResult,及其方法:

 

可见,导致出错的最终代码便是

total = obj.getAsLong();

那么,我们进去getAsLong方法去一探究竟:

奇怪,这个类的原生方法本来就不支持这个方法,那么该如何解决呢?

标题我们说到,这个springcloud框架是基于JHipster来做的开发,那么我们看框架原生是怎么做的呢?

通过查看源码,在其他的工程中找到了原因:

由上图可知,框架重写了一个和上文一样的全限定类名的方法,那么它的作用是什么呢?

通过比对,发现在上文中出错的方法被框架重写了:

也就是最重要的这一段:

total = obj.getAsJsonObject().get("value").getAsLong();

 通过这次重写,就解决了es查询报错的问题。

从上面的思路,其实我们可以看出,对引用jar包工具类的修改是如何实现的,在我们平时的工作中,相信也是会起到举一反三的作用。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值