【问题标题】:Jackson: Serialise Map<Object, Object>杰克逊:反序列化 Map<Object, Object>
【发布时间】:2018-04-14 12:54:09
【问题描述】:

我有以下课程:

public class A {
    @Id
    private Integer id;
    private String value;
}

public class B {
    @Id
    private Integer id;
    private Map<A, C> map;
}

public class C {
    @Id
    private Integer id;
    private String object;
}

当我尝试序列化 B 类时,我得到如下信息:

{
   "id":52,
   "map":{
      "com.project.model.A@5abbb6ce":{
         "id":12,
         "object":"some string"
      },
      "com.project.model.A@1d1c0771":{
         "id":15,
         "object":"another string"
      }
   }
}

如何让 Jackson 使用 C 类的 id 作为键,而不是整个对象?

例如

{
   "id":52,
   "map":{
      "5":{
         "id":12,
         "object":"some string"
      },
      "7":{
         "id":15,
         "object":"another string"
      }
   }
}

【问题讨论】:

    标签: jackson jpa-2.0 jackson2


    【解决方案1】:

    我希望找到一个更简单的解决方案,但最终实现了自定义序列化程序。

    public class B {
        @Id
        private Integer id;
    
        @JsonSerialize(keyUsing = CustomASerializer.class)
        private Map<A, C> map;
    }
    
    
    
    public class CustomASerializer extends JsonSerializer<A> {
    
        @Override
        public void serialize(A a, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
            jsonGenerator.writeString(String.valueOf(a.getId()));
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-19
      相关资源
      最近更新 更多