【发布时间】:2019-03-05 22:21:11
【问题描述】:
我正在尝试使用 OpenFeign 客户端访问 API,获取一些 JSON,并将其转换为 POJO 数组。
以前我只是简单地获取一个 JSON 字符串并使用 Gson 将其转换为这样的数组
FeignInterface {
String get(Request req);
}
String json = feignClient.get(request);
POJO[] pojoArray = new Gson().fromJson(json, POJO[].class);
这很有效。我想消除额外的步骤并假装自动解码JSON并直接返回一个POJO,所以我正在尝试这个
FeignInterface {
POJO[] get(Request req);
}
POJO[] pojoArray = feignClient.getJsonPojo(request);`
我遇到了这个错误
feign.codec.DecodeException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 2 path $
两种方法都使用同一个构建器
feignClient = Feign.builder()
.encoder(new GsonEncoder())
.decoder(new GsonDecoder())
.target(FeignInterface.class, apiUrl);
有人有什么想法吗?
【问题讨论】:
-
你能分享一个例子
JSON有效载荷吗?看起来它不是以JSON而是以String发送的,所以它从"而不是[或{开始。可能您需要注册某种拦截器,它可以让您从传入的有效负载中删除"。见“Expected BEGIN_OBJECT but was STRING at line 1 column 1” -
为什么要专门创建一个数组?使用
Collection或List更为常见。 -
@chrylis 之后我确实将其转换为
List,但无论如何我不明白为什么它没有作为数组返回 -
@MichałZiober [\r\n {\r\n "key": "value",\r\n etc 等
-
@MichałZiober 您关于它是
String的原始评论是正确的。我实现了一个新的feign.codec.Decoder,并使用它让 Feign 客户端将 json 作为 pojo 数组返回。
标签: java arrays json gson netflix-feign