用杰克逊过滤响应字段

问题描述

我正在尝试过滤嵌套对象中的字段:

class Response {

  // These objects themselves can have many fields within
  private final PropA a;
  private final PropB b;

  @JsonCreator
  public Response(PropA a,PropB b) { ... }
}

我想要一个通用的“过滤器助手”来实现上述逻辑。这是我到目前为止所拥有的(遵循与 this project 类似的方法)

public class FilterHelper {

    private final ObjectMapper objectMapper;

    public FilterHelper(ObjectMapper objectMapper) {
        this.objectMapper = objectMapper;
        this.objectMapper.addMixIn(Object.class,MyFilterMixin.class);
    }

    @JsonFilter("myfilter")
    public static class MyFilterMixin {
    }

    private static class MyFilter extends SimpleBeanPropertyFilter {
        private final Set<String> properties;

        public MyFilter(Set<String> properties) {
            super();
            this.properties = properties;
        }

        @Override
        public void serializeAsField(final Object pojo,final JsonGenerator jgen,final SerializerProvider provider,final PropertyWriter writer) throws Exception {

            System.out.println("************************** " + writer.getName());
            if (properties.contains(writer.getName())) {
                writer.serializeAsField(pojo,jgen,provider);
            } else if (!jgen.canOmitFields()) {
                writer.serializeAsOmittedField(pojo,provider);
            }
        }
    }

    public String filter(T obj,Set<String> fields) {

        FilterProvider filterProvider = new SimpleFilterProvider().addFilter("myfilter",new MyFilter(fields));

        return objectMapper.writer(filterProvider).writeValueAsString(obj);
    }
}

当我使用 ?fields=one,two 作为查询参数点击此端点时,我希望从打印到控制台的行中看到该顶级 Response 对象中的每个字段,如下所示:

******************* a
******************* a1
******************* a2
******************* ..etc
******************* b
******************* b1
******************* b2
******************* ..etc

但在从端点获取 500 状态代码之前,我只看到顶级 ab 字段的输出后跟错误:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot resolve PropertyFilter with id 'myfilter'; no FilterProvider configured (through reference chain: com.google.common.collect.SingletonImmutableList[0])

值得一提的是,我以某种方式进行了这项工作,但在一些我不记得的更改后它被破坏了。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...