java - 如果一个java pojo被声明为一个对象,那么如何根据运行时类型控制jackson序列化?

标签 java spring jackson

例如,如果我声明 Map<String,Object>使用混合类型值集,我尝试使用自定义 TypeResolverBuilder 进行序列化,我无权访问该值的运行时类型。

但是如果我想为某些值写入类型信息而不是其他值,那么如何实现呢?我一直在阅读 DefaultSerializerProvider它似乎忽略了运行时类型,只使用 JavaType(即 Object.class)

我们正在使用 Jackson 2.9

最佳答案

如果您能够编辑需要控制输出的 POJO,您应该能够扩展 JsonSerializer 并且仅在序列化方法的输出中写入您想要的信息。

您还可以注释您的映射以提供自定义序列化程序并使用 instanceof 询问要序列化的对象

@JsonSerialize(keyUsing = SpecialSerializer.class) 
Map<String, Object> map;

然后在你的序列化器中:

 @Override
    public void serialize(Object value, 
      JsonGenerator gen,
      SerializerProvider serializers) 
      throws IOException, JsonProcessingException {
           if(value instanceof MySpecialObject){

                 //special logic here
          }
    }

关于java - 如果一个java pojo被声明为一个对象,那么如何根据运行时类型控制jackson序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50911938/

相关文章:

java - Spring Boot HealthIndicator 示例

java - 解码 Json 对象时出现 "Content is not allowed in prolog"

java - 如何以编程方式将按钮添加到自定义 View ?

java - Java 中的 'this' 关键字

java - 没有反射的 Spring

Spring Boot Maven 插件不创建可执行 jar

java - 从 JSON 反序列化 java 枚举

json - Spark 2.1.1 : Parsed JSON values do not match with class constructor

java - 用于 GWT 的 Moxieapps 文件 uploader 添加多个上传按钮

fonts - 将 postscript 字体转换为 opentype/truetype 字体的 Java 库