Jackson 我可以在对象之外获得@JsonAnySetter功能的等价物吗?

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

我在Jackson反序列化的对象中有这样的定义:

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
方法。