繁体   English   中英

Feign 客户端无法将响应 json 转换为 Java Object 因为开头的字符无效

[英]Feign Client not able to convert the response json to Java Object because of invalid character in the beginning

我创建了一个 Feign 客户端 EmployeeServiceClient.java 如下所示

EmployeeServiceClient.java

@FeignClient(name = "employeeclient", url = "https://internel.omnesys.org")
public interface EmployeeServiceClient {
    @RequestMapping(method = RequestMethod.GET, value = "/v1/employees")
    List<EmployeeDetails> getEmployeeDetails();
}

EmployeeDetails.java

public class EmployeeDetails {
  private Employee employee;
  private String empId;
  // getters and setters
}

员工.java

public class Employee {
  private String name;
  private String firstName;
  private String lastName;
  private String city;
  // getters and setters
}

服务https://internel.omnesys.org/v1/employees (这是一个由不同团队管理的内网 REST 服务)给了我一个响应生命,如下所示

)}]',
[{"employee":{"name":"Emp1","firstName":"firstName1","lastName":"lastName1","city":"city1"},"empId":"empId123"},{"employee":{"name":"Emp2","firstName":"firstName2","lastName":"lastName2","city":"city2"},"empId":"empId456"}]

我得到假装异常,因为服务响应包含一个额外的)}]',在开始

我已要求服务团队删除这些无效字符,但他们说无法删除它,因为它是为了其他要求而故意放置的,并要求我从我们这里处理。

谁能帮我解决这个问题

我看到三个选项:

  1. 使用自定义配置自定义您的客户端,并提供您自己的解码器来处理疯狂的响应;) 扩展ResponseEntityDecoder并添加您的特殊响应处理。

  2. 修改方法签名,返回feign.Response,自行处理:

 @FeignClient(name = "employeeclient", url = "https://internel.omnesys.org") public interface EmployeeServiceClient { @RequestMapping(method = RequestMethod.GET, value = "/v1/employees") feign.Response getEmployeeDetails(); }
  1. 类似于第二个选项:更改您的方法签名以返回字符串。 清理生成的字符串后,您将能够通过 jackson 等将 json 映射到您的类。

请注意:对于 2. 和 3.,根本不会有错误处理,您应该注意这一点

如果不选择第一个选项来隐藏解析和异常处理并确保当前方法签名,还可以考虑添加适配器。

这个方法救了我的眼泪,我将它添加到 Feignclient 的配置 class 中:

@Bean 公共编码器 feignEncoder(){

HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter(customObjectMapper());

ObjectFactory objectFactory = () -> new HttpMessageConverters(jacksonConverter);

返回新的 SpringEncoder(objectFactory); } 在此处输入图像描述

希望它会帮助你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM