我在服务器上有一个类:
Class A{
int x;
int y;
// getters and setters
}
在旧客户端中
Class A{
int x;
}
在新客户端中
Class A{
int x;
int y;
}
现在我无法更改旧的客户端代码,并且客户端给出了org.codehaus.jackson.map.exc.UnrecognizedPropertyException。我可以更改服务器或新的客户端代码。
如何使用杰克逊序列化程序使其工作?
不同的格式:
可以使用服务器上的视图在运行时决定要包括哪些属性。然后,新客户端可以请求与旧客户端相同的内容,但使用不同的参数/标头或通过不同的 API 路径,该路径仅使用具有新属性的新视图。
相同的格式:
如果旧客户端不支持新格式,则不能简单地强制它支持它而不修改客户端。事实上,如果你能做这样的事情,那将是相当危险的,因为这意味着现有的应用程序不能依赖它们的格式限制。
但是,如果您可以修改旧客户端,则可以执行以下操作:
- 将
@JsonIgnoreProperties(ignoreUnknown = true)
添加到旧客户端中的 POJO - 如果您不能修改 POJO,但可以访问 ObjectMapper:
objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
- 如果你可以访问ObjectMapper,但不想影响所有其他POJO,你可以只为那个POJO混合 注释。