【发布时间】:2020-10-05 15:25:38
【问题描述】:
我在一个被 Jackson 反序列化的对象中有这个定义:
public class ImportantInterfaceObject {
@JsonAnySetter
private Map<String, String> unmapped = new HashMap<String, String>();
// ... other stuff omitted for clarity ...
}
这在允许unmapped 成员捕获输入中的任何意外值以根据要求和最佳实践进行处理和处理方面非常有效。
但是,这个额外的包袱污染了ImportantInterfaceObject 定义。
有没有办法实现与 @JsonAnySetter 相同的效果,但在 Jackson 对象生命周期的另一个级别?
例如,
ObjectMapper objectMapper = new ObjectMapper();
// pseudo-code, this doesn't exist
objectMapper.setAnyHandler((key,value) -> doSomething(...));
// back to normal valid code now
JsonNode json = objectMapper.readTree(input);
【问题讨论】:
-
你能清楚你所说的污染是什么意思吗?您想处理那些未映射的字段,但不希望在您的类中有该映射或逻辑或什么?
-
看看类似的问题:How to know what all properties are ignored by @JsonIgnoreProperties(ignoreUnknown=true)。尝试使用
DeserializationProblemHandler类和handleUnknownProperty方法。