当前位置: 首页 > 知识库问答 >
问题:

如何防止Jackson在第三方类中序列化字段

越星晖
2023-03-14

这是一个关于Jackson2.3的问题,我不可能更改到其他框架。

我想使用Jackson2.3将对象序列化到json。一些对象来自实现特定(外部)接口的第三方库。我想实现的是防止那些对象中的某些字段被序列化。我没有修改这个类的权限,所以@jsonIgnore不会删除它。下面是一个例子

    public interface ThirdParty{
      public char[] getPassword();
      public String getUser();
      public Department getDepartment();
    }
    ObjectMapper mapper=new ObjectMapper();

    SimpleModule testModule = new SimpleModule("DemoModule",VersionUtil.versionFor(this.getClass()));
    testModule.addSerializer(ThirdParty.class, new Some_Serializer_That_Can_Ignore_Password()));
    mapper.registerModule(testModule);

(我不认为有一个叫做Some_Serializer_That_Can_Ignore_Password的东西,我想要的是一个不序列化字段的东西)我不想写很多代码来使它工作,我见过Jackson旧版本的非常详细的例子,但没有Jackson 2.3的例子。

谢谢!

共有1个答案

公孙琛
2023-03-14

这并不能真正回答最初的问题,但我找到了一种排除特定类型的方法,这段代码确保任何StackTraceElement都不序列化。

    SimpleModule testModule = new SimpleModule("DemoModule", VersionUtil.versionFor(this.getClass()));
    testModule.addSerializer(StackTraceElement.class,new JsonSerializer<StackTraceElement>() {
        @Override
        public void serialize(StackTraceElement value, JsonGenerator jgen, SerializerProvider provider){/*Do not serialize*/}
    });
    mapper.registerModule(testModule);
 类似资料:
  • 我想进一步说明这个问题是关于什么的,我已经漫游了一个小时了,但没有找到任何东西。 更糟糕的是,正如您所看到的,该属性是final(这就是为什么我热衷于通过反序列化在实例化时使用Jackson反射能力)。我已经阅读了关于以不同的方式注释setter和getter的潜在解决方案,但如果可能的话,我希望将此属性保留为最终属性。如果不可能,我会接受一个非最终财产。 我希望答案不建议自定义序列化/反序列化,

  • 问题内容: 我有多态类型,并且可以从JSON反序列化为POJO。实际上,我遵循这里的文档。将POJO序列化为JSON时,我得到了不需要的属性,特别是逻辑类型名称。 当Jackson序列化为JSON时,它提供了我不想公开的类型信息。 我可以以某种方式防止这种情况吗?反序列化时我只想忽略。 问题答案: 一个简单的解决方案是将和配置移至,然后仅注册进行反序列化。

  • 我的问题类似于防止GSON序列化JSON字符串,但是那里的解决方案使用GSON库,而我仅限于使用Jackson(fasterxml)。 我有一个实体类,如下所示: 我想用映射的json字符串表示填充body字段,然后将其作为ResponseEntity的一部分发送。如下事物: 预期输出: 实际输出: 我在用 Jackson Core v2.8.2 标记,但这没有帮助,因为我的字段在写入实体时已经从

  • 映射可能有大量的空值和空键,我不希望空值被序列化。 对于正在序列化的所有foo,我不想序列化foo中引用的null对象。 实现这一点的最佳方法是什么?我正在我的项目中使用Jackson-Core1.9和Jackson-Mapper1.9 JAR。

  • 问题内容: 我正在使用v2 Google Play服务中的Google的LatLng类。那个特定的类是最终的,不会实现。有什么办法可以使该类实现? 我不想声明 短暂的 。 问题答案: 不是,但是是,如果可以的话。如果没有,您可以自己处理序列化:

  • 有什么方法可以防止一个字段在Jackson中反序列化吗?但是我需要序列化我用@JsonIgnoreProperties尝试字段,这阻止了序列化和反序列化。