我只能想到一个非杰克逊解决方案,使用没有映射引用的基类,然后转换为实际类:
// expect a B on an incoming request
class B {
// ...
}
// after the data is read, cast to A which will have empty references
class A extends B {
public Map<String,List<String>> references;
}
如果您不想要它们,为什么还要发送参考文献?
还是传入数据不在您的手中,而您只是想避免映射异常告诉您杰克逊找不到要为传入引用设置的属性?为此,我们使用所有 Json 模型类都继承的基类:
public abstract class JsonObject {
@JsonAnySetter
public void handleUnknown(String key, Object value) {
// for us we log an error if we can't map but you can skip that
Log log = LogFactory.getLog(String.class);
log.error("Error mapping object of type: " + this.getClass().getName());
log.error("Could not map key: \"" + key + "\" and value: \"" + "\"" + value.toString() + "\"");
}
然后在你添加的 POJO@JsonIgnoreProperties
中,传入的属性将被转发到handleUnknown()
@JsonIgnoreProperties
class A extends JsonObject {
// no references if you don't need them
}
编辑
这个 SO Thread描述了如何使用 Mixins。如果您想保持结构原样,这可能是解决方案,但我还没有尝试过。