Feign Client не может преобразовать ответ json в Java Object из-за неверного символа в начале - PullRequest
0 голосов
/ 26 октября 2018

Я создал 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 (это служба 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 голосов
/ 26 октября 2018

Я вижу три варианта:

  1. Настройте свой клиент с пользовательской конфигурацией и предоставьте свой собственный декодер, который будет обрабатывать сумасшедший ответ;) Расширить ResponseEntityDecoder и добавьте свою специальную обработку ответа.

  2. Измените сигнатуру метода так, чтобы она возвращала feign.Response и обработайте ее самостоятельно:

    @ FeignClient (name = "employeeeclient", url =" https://internel.omnesys.org") открытый интерфейс EmployeeServiceClient {@RequestMapping (method = RequestMethod.GET, value = "/ v1 / employee") feign.Response getEmployeeDetails ();}

  3. Аналогично второму варианту: измените сигнатуру метода так, чтобы она возвращала строку. После очистки полученной строки вы сможете сопоставить json с вашими классами по Джексону и т. Д.

Обратите внимание: для 2. и 3. обработка ошибок не будет вообще, и вы должны позаботиться об этом

Также рассмотрите возможность добавления адаптера, если вы не выбрали первую опцию, чтобы скрытьАрсинг и обработка исключений и обеспечение текущей сигнатуры метода.

...