java - Jackson 序列化 - 带有 JsonRawValue 的 Java 可选字符串

标签 java java-8 jackson

我有一个可选字符串,希望 Jackson 使用 @JsonRawValue 进行序列化,但字符串值附加了 Optional[]。我该如何避免这种情况?

 @JsonRawValue
 Optional<String> data;

我已经用 Jdk8Module 注册了 ObjectMapper。

最佳答案

根据我的评论,您可以忽略 Optional 字段,而是为 String 值使用自定义 getter:

public static class Test {

    @JsonIgnore
    Optional<String> data;

    @JsonRawValue
    public String getDataValue() {
        return data.orElse(null);
    }

    public Optional<String> getData() {
        return data;
    }

    public void setData(final Optional<String> data) {
        this.data = data;
    }
}

public static void main(final String[] args) throws JsonProcessingException {
    final ObjectMapper om = new ObjectMapper();

    final Test data = new Test();
    data.data = Optional.of("Hello World");

    final String value = om.writeValueAsString(data);
    System.out.println(value);
}

注意:Jdk8Module 默认包含在这个 jackson 版本中。但是,使用 @JsonRawValue 似乎会覆盖 Optional 的序列化,因此摆脱 Optional 的自定义 getter 有助于实现这一点。

关于java - Jackson 序列化 - 带有 JsonRawValue 的 Java 可选字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59030025/

相关文章:

java - 对于 Jackson,如何安全地共享 ObjectMapper ?有没有不可变的ObjectMapper?

java - 以编程方式更改按钮文本颜色

java - 如何在android Activity中使用多重继承?

Java 8 : How to convert String to Map<String, 字符串>?

Java8 : Create list of object using enum value

java - 如何基于公共(public)字段使用 Jackson 抽象反序列化不同的枚举类型?

java - 自定义StdDeserializer不使用指定的@JsonView

java - int i = array.length 比只调用 array.length 两次有什么优势吗?

Java SWT 更新文本控件

java - 如何使用 java 多线程解压巨大的文件夹 - 首选 java8?