繁体   English   中英

在响应中添加新字段时的向后兼容性

[英]Backward compatibility when adding a new field in response

我正在为我的请求/响应类使用 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发布我的请求。

这里有什么帮助吗?

您看到此错误是因为旧版本没有忽略未知属性。 较旧的服务器需要将@JsonIgnoreProperties(ignoreUnknown = true)作为接口的注释,以便它忽略已在后续版本中添加的属性。

如果您无法更改旧版本,则无法解决此问题,因为旧服务器旨在不忽略未知属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM