Обратная совместимость при добавлении нового поля в ответ - PullRequest
1 голос
/ 28 апреля 2020

Я использую Java Immutables для своих классов запросов / ответов, который выглядит примерно так:

@JsonDeserialize(builder = ImmutableMyRequest.Builder.class)
@Immutable
public interface MyRequest {
  @Nullable String getA();
  @NotNull String getB();

  ...
}

Теперь мне нужно добавить новое поле в мой запрос:

@JsonDeserialize(builder = ImmutableMyRequest.Builder.class)
@Immutable
public interface MyRequest {
  @Nullable String getA();
  @NotNull String getB();
  @Nullable String getC(); // Edit

  ...
}

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

Unexpected status. Expected: 200. Actual: 400. Response: InboundJaxrsResponse{context=ClientResponse{method=POST, uri=http://some.url.here, status=400, reason=Bad Request}}

Я используя javax.ws.rs.client.Invocation.Builder для публикации моих запросов.

Любая помощь здесь?

1 Ответ

0 голосов
/ 29 апреля 2020

Вы видите эту ошибку, потому что старая версия не игнорирует неизвестные свойства. Более старый сервер должен иметь @JsonIgnoreProperties(ignoreUnknown = true) в качестве аннотации к интерфейсу, чтобы он мог игнорировать свойство, добавленное в последующей версии.

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

...