Как я могу сопоставить JsonObject с другим JsonObject в Java для связи между API - PullRequest
0 голосов
/ 12 января 2019

У меня есть API (A), получающий запросы и отправляющий эти запросы другому API (B). Однако прежде чем API (A) отправит запросы в API (B), ему необходимо отформатировать их так, чтобы API (B) принимал запросы. Некоторые данные, полученные в API (A), не будут использоваться или отображаться в запросах, отправляемых в API (B), также некоторые поля данных в API (B) будут пустыми. Я хочу отобразить поля из API (A) в формат, который принимает (B).

Это формат, в который API (A) получает запросы:

{
"customer" : {
    "name" : "Bob",
    "phone" : "000-123-4567",
    "email" : "bob@email.com",
    "zip" : "12345"
    }
}

Это формат, в который API (B) получает запросы. Это формат, в который я хочу преобразовать все запросы, полученные API (A), перед отправкой их в API (B). Это пример:

{
"transaction" : {
    "name" : "Bob",
    "phone" : "000-123-4567",
    "address" : "", 
    "city" : ""
    }
}

Таким образом, соответствующие ключи будут сопоставлены, а не соответствующие ключи останутся пустыми. Причина, по которой я не могу изменить способ, которым API (A) получает запросы и сопоставляет его с тем же форматом, что и запросы API (B), заключается в том, что я собираюсь интегрировать его с более чем одним API. Я не уверен, есть ли простой способ сделать это.

До сих пор я думал о создании метода, который будет принимать объект json (который будет запросом, который получил A) и объект RequestB (который я создам и представлю запрос на отправку в API B), сравнить ключи, которые соответствуют и устанавливают значения, затем возвращают правильно отформатированный запрос, чтобы отправить его в API (B). Однако, поскольку будет более одного API, с которым API (A) будет взаимодействовать (несколько форматов для преобразования / сопоставления), это может быть не очень хорошим решением. Есть идеи?

Ответы [ 2 ]

0 голосов
/ 12 января 2019

В приложении к ответу @ Darshan_Mehta я бы рекомендовал MapStruct . Классы Mapper могут быть определены минимальным и интуитивно понятным способом с аннотациями:

@Mapper
public interface CustomerMapper {
    Transaction toTransaction(Customer input);
}

Фактические реализации генерируются во время компиляции с использованием Подключаемый API обработки аннотаций .

0 голосов
/ 12 января 2019

Учитывая, что вам необходимо создать в вашей системе модели, принадлежащие к разным APIs, вам, вероятно, следует изучить структуры сопоставления объектов Java, чтобы упростить свою работу, например ::10000

  • Здесь - декларативный способ (Dozer)
  • Здесь является императивным способом (Model Mapper)

Есть и несколько других, вы можете выбрать любой из них.

...