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

标签 java json list jackson wrapper

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

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

[ "a", "b", "c" ]

但是,字符串被我们代码中的一个类包装/封闭:

public static class StringWrapper {
    protected final String s;

    public String getS() {
        return s;
    }

    public StringWrapper(final String s) {
        this.s = s;
    }
}

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

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

[ {
  "s" : "a"
}, {
  "s" : "b"
}, {
  "s" : "c"
} ]

最方便的方法是什么?如果可能,反序列化也应该有效。

最佳答案

您可以在单个 getter 上使用 @JsonValue

@JsonValue
public String getS() {
    return s;
}

来自javadoc,

Marker annotation similar to javax.xml.bind.annotation.XmlValue that indicates that results of the annotated "getter" method (which means signature must be that of getters; non-void return type, no args) is to be used as the single value to serialize for the instance. Usually value will be of a simple scalar type (String or Number), but it can be any serializable type (Collection, Map or Bean).

关于java/jackson - 不要序列化包装类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27691560/

相关文章:

java - jersey 如何检查请求的数据格式是什么?

java - Java 中的动态转换和调用

json - 如何将postgres json转换为整数

javascript - Chrome扩展程序的内容脚本不会影响特定网站

python - 乘以 RGB 值列表 Python

java - Google DataStore - 如何按 ID/名称获取数据?

java - 更改列表项背景边框的颜色

javascript - VueJS 连接外部数据

angular - Angular 中可重用的自定义组件列表

从列表中查找最小值的 C++ 函数。这个函数是否正确,因为返回的迭代器失效了