1

I am using Java Immutables for my request/response classes, which looks something like this:

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

  ...
}

Now i need to add a new field to my request:

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

  ...
}

In my understanding, this should not break the compatibility and the older clients should simply ignore the new fields, but when i use the older version with the new request, it fails:

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

I am using javax.ws.rs.client.Invocation.Builder to post my requests.

Any help here?

Rafay
  • 92
  • 8

1 Answers1

0

You are seeing this error because the old version isn't ignoring unknown properties. The older server needs to have @JsonIgnoreProperties(ignoreUnknown = true) as an annotation to the interface in order for it to ignore a property that has been added in a subsequent version.

If you aren't able to change the old version, there is no way around this issue as the older server is designed to not ignore unknown properties.

Ryan Tse
  • 1,559
  • 11
  • 15