Jackson对象Map器-将非原始字段序列化为字符串

chhqkbe1  于 2023-04-20  发布在  其他
关注(0)|答案(2)|浏览(112)

下面是一个例子:

class SomeType2 {
    public String a;
    public String b;
}

class SomeType1 {
    public String c;
    public SomeType2 d;
}

SomeType1 value = new SomeType1("c", new SomeType2("a", "b"));

objectMapper.writeValueAsString(value);

上面的连载应该给予我回

{
    "c": "c",
    "d": "{\"a\":\"a\",\"b\":\"b\"}"
}

我扫描了所有的Jackson注解,似乎没有一个能够实现这一点。
自定义序列化器(和反序列化器)是我实现这个简单目标的唯一希望吗?

ogsagwnx

ogsagwnx1#

如果你想将SomeType 2序列化为String而不是普通的JSON对象,你需要定义一个自定义的de/serialiser。

dz6r00yl

dz6r00yl2#

经过一些改进后,获得了理想的性能:

public class Program {
    private static ObjectMapper objectMapper = new ObjectMapper();

    public static void main(String[] args) throws IOException {
        SomeType1 value = new SomeType1("c", new SomeType2("a", "b"));
        String s = objectMapper.writeValueAsString(value);
        System.out.println(s);

    }
    
    @Data
    @AllArgsConstructor
    static class SomeType2 {
        public String a;
        public String b;
    }

    @Data
    @AllArgsConstructor
    static class SomeType1 {
        public String c;
        public SomeType2 d;
    }
}

输出为:{“c”:“c”,“d”:{“a”:“a”,“B”:“b”}}
至少应该显式提供构造函数或使用Lombok

相关问题