Jackson 我可以在对象之外获得@JsonAnySetter功能的等价物吗?
我在Jackson反序列化的对象中有这样的定义:Jackson 我可以在对象之外获得@JsonAnySetter功能的等价物吗?,jackson,jackson-databind,Jackson,Jackson Databind,我在Jackson反序列化的对象中有这样的定义: public class ImportantInterfaceObject { @JsonAnySetter private Map<String, String> unmapped = new HashMap<String, String>(); // ... other stuff omitted for clarity ... } 如果您只是想忽略未映射的属性,您可以这样做: Objec
public class ImportantInterfaceObject {
@JsonAnySetter
private Map<String, String> unmapped = new HashMap<String, String>();
// ... other stuff omitted for clarity ...
}
如果您只是想忽略未映射的属性,您可以这样做:
ObjectMapper om = new ObjectMapper();
om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
public class UnmappedPropertyHandler {
@JsonAnySetter
private void handleUnmapped(String name, String value) {
// do what you need
}
}
但我猜您希望对未知属性启用一些处理,但同时将其隐藏在类的实际逻辑中
在这种情况下,您可以使用继承而不是Map
创建一个使用@JsonAnySetter
注释的方法,类似于:
ObjectMapper om = new ObjectMapper();
om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
public class UnmappedPropertyHandler {
@JsonAnySetter
private void handleUnmapped(String name, String value) {
// do what you need
}
}
及
您也可以声明接口,但如果Java8无法隐藏该方法:
interface IUnmappedPropertyHandler {
@JsonAnySetter
default void handleUnmapped(String name, String value) {
}
}
对于Java11,这是可能的,例如:
interface IUnmappedPropertyHandler {
@JsonAnySetter
private void handleUnmapped(String name, String value) {
}
}
你能澄清你所说的污染是什么意思吗?您希望处理这些未映射的字段,但不希望在类中包含该映射或逻辑或其他内容?请查看类似问题:。尝试使用
反序列化ProblemHandler
类和handleUnknownProperty
方法。