Jackson JSON:过滤器内声明的过滤器 - 如何忽略子过滤器?

Jackson JSON: Filters declared within filters - how to ignore the child filter?

在过滤器中声明过滤器时出现异常。例如,给出这些 classes(注意 Parent 有一个 Child 成员):

@JsonFilter("Parent")
public class Parent {
    private String id;
    private String name;
    private Child child;
    private String other1;
    private String other2;
    // other fields
}

@JsonFilter("Child")
public class Child {
    private String id;
    private String name;
    // other fields
}

当我使用过滤器生成 JSON of class Child 时,我没有遇到任何问题。但是当我以这种方式使用过滤器生成 class Parent 的 JSON 时:

ObjectMapper mapper = new ObjectMapper().setVisibility(JsonMethod.FIELD, Visibility.ANY);

String[] ignorableFieldNames = { "other1", "other2" };

FilterProvider filters = new SimpleFilterProvider().
addFilter("Parent",SimpleBeanPropertyFilter.serializeAllExcept(ignorableFieldNames));

mapper.filteredWriter(filters).writeValueAsString(object);

我收到错误 No filter configured with id 'Child'。我明白,由于 Child 是在 Parent 中声明的,并且都有 @JsonFilter 注释,所以我收到错误是因为我只使用了 Parent 过滤器。但是我需要在两个 classes 中添加注释,因为我还在另一个程序中仅在子 class 上运行过滤器。解决方法是什么?

这就是答案:您为每个带注释的过滤器追加 addFilter 两次或更多次:

String[] ignorableFieldNames1 = { "other1", "other2" };
String[] ignorableFieldNames2 = { "other3", "other4" };

FilterProvider filters = new SimpleFilterProvider().     
addFilter("Parent",SimpleBeanPropertyFilter.serializeAllExcept(ignorableFieldNames1))
addFilter("Child",SimpleBeanPropertyFilter.serializeAllExcept(ignorableFieldNames2));