我试图使用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);有人有什么想法吗?
发布于 2019-03-06 22:57:00
您已经破坏了JSON有效载荷。在序列化之前,您需要删除所有不支持的字符。Feign允许这样做:
如果您需要在将响应交给解码器之前对其进行预处理,则可以使用mapAndDecode构建器方法。一个示例用例是处理一个只为jsonp服务的API,您可能需要在将jsonp发送到您选择的Json解码器之前打开jsonp:
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有效负载是有效的,并且可以进行反序列化。
https://stackoverflow.com/questions/55012543
复制相似问题