Feign Client не может преобразовать ответ json в объект Java из-за недопустимого символа в начале

Я создал клиент 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"}]

Я получаю симулированное исключение, потому что ответ службы содержит дополнительный )}]', в начальном

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

Может ли кто-нибудь помочь мне в этом


person Alex Man    schedule 26.10.2018    source источник
comment
Попросите команду предоставить остальные api, которые вы пытаетесь использовать, исправить их json.   -  person daniu    schedule 26.10.2018


Ответы (1)


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

  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. Аналогично второму варианту: измените подпись метода, чтобы она возвращала String. После очистки полученной строки вы сможете сопоставить json со своими классами с помощью Джексона и т. Д.

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

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

person ibexit    schedule 26.10.2018