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"}]

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

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

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

Попросите команду предоставить остальные api, которые вы пытаетесь использовать, исправить их json.

daniu 26.10.2018 21:05
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
13 476
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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. обработки ошибок не будет, и вы должны позаботиться об этом.

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

Другие вопросы по теме