代码之家  ›  专栏  ›  技术社区  ›  Wild Goat

来自一个对象的jackson序列化密钥和值

  •  -1
  • Wild Goat  · 技术社区  · 8 年前

    我试图创建一个自定义序列化程序来生成pair对象,但我希望在序列化对象时避免使用“key”和“value”字段。

    对象POJO:

    public class TypeObjectPair implements Serializable {
    
    
        private final String canonicalObjectName;
        private final Object object;
    
    
        public String getKey() {
            return canonicalObjectName;
        }
    
        public Object getValue() {
            return object;
        }
    
    
    }
    

    个人类。(理论上可以是任何其他对象类)

    class Person{
        int id;
        String name;
    }
    

    要序列化的最终对象:

    TypeObjectPair obj = new TypeObjectPair("com.example.Person", new Person(1, "Peter"));
    

    所需输出:

    {
        "com.example.object" : {
                                  "id" : 1,
                                  "name" : "Peter"    
                               }
    }
    

    对如何实现它有什么想法吗?

    1 回复  |  直到 8 年前
        1
  •  2
  •   cassiomolin    8 年前

    你可以用一个 Map<K, V> 具有 @JsonAnyGetter :

    public class TypeObjectPair {
    
        private Map<String, Object> data = new HashMap<>();
    
        public TypeObjectPair(String key, Object value) {
            data.put(key, value);
        }
    
        @JsonAnyGetter
        public Map<String, Object> getData() {
            return data;
        }
    }
    

    然后使用如下:

    ObjectMapper mapper = new ObjectMapper();
    TypeObjectPair pair = new TypeObjectPair("com.example.object", new Person(1, "Peter"));
    String json = mapper.writer().withDefaultPrettyPrinter().writeValueAsString(pair);
    

    输出为:

    {
      "com.example.object" : {
        "id" : 1,
        "name" : "Peter"
      }
    }