我已经创建了一个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"}]
我正在假装异常,因为服务响应在开头包含一个额外的)}]',
我已经要求服务团队删除那些无效字符,但是他们说无法删除它,因为它是出于其他某些要求而专门放置的,并要求我从头开始处理。
有人可以帮我吗
答案 0 :(得分:2)
我看到三个选项:
使用custom configuration自定义客户,并提供自己的解码器来处理疯狂的响应;)扩展ResponseEntityDecoder并添加特殊的响应处理。
更改方法签名以返回伪装。响应并自行处理:
@FeignClient(name =“ employeeclient”,url =“ https://internel.omnesys.org”) 公共接口EmployeeServiceClient { @RequestMapping(方法= RequestMethod.GET,值=“ / v1 /员工”) feign.Response getEmployeeDetails(); }
类似于第二个选项:更改方法签名以返回String。清除生成的String后,您将能够通过jackson等将json映射到您的类。
请注意:对于2.和3.,将完全没有错误处理,您应该注意这一点
如果不选择第一个选项来隐藏解析和异常处理并确保当前方法签名,还可以考虑添加适配器。