首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用OpenFeign获取pojo数组?

如何使用OpenFeign获取pojo数组?
EN

Stack Overflow用户
提问于 2019-03-05 22:21:11
回答 1查看 1.6K关注 0票数 2

我试图使用OpenFeign客户机来访问API,获取一些JSON,并将其转换为POJO数组。

以前,我只是获得了一个JSON字符串,并使用Gson将其转换为如下所示的数组

代码语言:javascript
复制
FeignInterface {
    String get(Request req);
}
String json = feignClient.get(request);
POJO[] pojoArray = new Gson().fromJson(json, POJO[].class);

这起作用了。我想消除额外的步骤,并假装自动解码JSON并直接返回一个POJO,所以我尝试这样做

代码语言:javascript
复制
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 $

这两种方法都使用相同的生成器。

代码语言:javascript
复制
feignClient = Feign.builder()
     .encoder(new GsonEncoder())
     .decoder(new GsonDecoder())
     .target(FeignInterface.class, apiUrl);

有人有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-06 22:57:00

您已经破坏了JSON有效载荷。在序列化之前,您需要删除所有不支持的字符。Feign允许这样做:

如果您需要在将响应交给解码器之前对其进行预处理,则可以使用mapAndDecode构建器方法。一个示例用例是处理一个只为jsonp服务的API,您可能需要在将jsonp发送到您选择的Json解码器之前打开jsonp:

代码语言:javascript
复制
public class Example {
  public static void main(String[] args) {
    JsonpApi jsonpApi = Feign.builder()
         .mapAndDecode((response, type) -> jsopUnwrap(response, type), new GsonDecoder())
         .target(FeignInterface.class, apiUrl);
  }
}

因此,您需要在您的配置中执行相同的操作,并且:

  • trim响应,并在有效载荷开始和结束时删除所有whitespaces
  • 删除所有new_line字符,如:\r\n\r\n

使用在线工具确保您的JSON有效负载是有效的,并且可以进行反序列化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55012543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档