Feign Client由于开头的字符无效,因此无法将响应json转换为Java Object

时间:2018-10-26 18:13:49

标签: java spring-cloud netflix-feign spring-cloud-feign feign

我已经创建了一个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
}

Employee.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(这是一个由其他团队管理的Intranet REST服务)使我的响应寿命如下所示

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

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

我已经要求服务团队删除那些无效字符,但是他们说无法删除它,因为它是出于其他某些要求而专门放置的,并要求我从头开始处理。

有人可以帮我吗

1 个答案:

答案 0 :(得分:2)

我看到三个选项:

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

  2. 更改方法签名以返回伪装。响应并自行处理:

    @FeignClient(name =“ employeeclient”,url =“ https://internel.omnesys.org”) 公共接口EmployeeServiceClient {   @RequestMapping(方法= RequestMethod.GET,值=“ / v1 /员工”)   feign.Response getEmployeeDetails(); }

  3. 类似于第二个选项:更改方法签名以返回String。清除生成的String后,您将能够通过jackson等将json映射到您的类。

请注意:对于2.和3.,将完全没有错误处理,您应该注意这一点

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