java/jackson - 不要序列化包装类

Joh*_*apy 4 java json list wrapper jackson

使用Jackson库序列化字符串列表时,它正确提供了一个JSON数组字符串:

<mapper>.writeValue(System.out, Arrays.asList("a", "b", "c"));

[ "a", "b", "c" ]
Run Code Online (Sandbox Code Playgroud)

但是,字符串由我们的代码中的类包装/包含:

public static class StringWrapper {
    protected final String s;

    public String getS() {
        return s;
    }

    public StringWrapper(final String s) {
        this.s = s;
    }
}
Run Code Online (Sandbox Code Playgroud)

在序列化"字符串包装器"列表时,我希望获得与上面相同的输出.现在我得到:

<mapper>.writeValue(System.out, Arrays.asList(new StringWrapper("a"), new StringWrapper("b"), new StringWrapper("c")));

[ {
  "s" : "a"
}, {
  "s" : "b"
}, {
  "s" : "c"
} ]
Run Code Online (Sandbox Code Playgroud)

这样做最方便的方法是什么?如果可能,反序列化也应该起作用.

Sot*_*lis 9

你可以使用@JsonValue你的单个吸气剂

@JsonValue
public String getS() {
    return s;
}
Run Code Online (Sandbox Code Playgroud)

来自javadoc,

类似于javax.xml.bind.annotation.XmlValue的标记注释,表示带注释的"getter"方法的结果(这意味着签名必须是getter的结果;非void返回类型,没有args)将被用作单个要为实例序列化的值.通常,value将是一个简单的标量类型(String或Number),但它可以是任何可序列化的类型(Collection,Map或Bean).