我正在尝试使用 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
有效负载。在序列化之前,您需要删除所有不支持的字符。Feign允许这样:
如果您需要在将响应提供给解码器之前对其进行预处理,
您可以使用mapAndDecode构建器方法。一个示例用例是
处理仅提供 jsonp 服务的 API,您可能需要
在将 jsonp 发送到您选择的 Json 解码器之前解开它:
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
Use 在线工具确定你的JSON
有效负载有效并准备好反序列化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)