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

Jackson序列化-带有JsonRawValue的Java可选字符串,java,java-8,jackson,Java,Java 8,Jackson,我有一个可选字符串,希望Jackson使用@JsonRawValue进行序列化,但字符串值附加了可选[]。我如何避免这种情况 @JsonRawValue Optional<String> data; @JsonRawValue 可选数据; 我已经向Jdk8Module注册了ObjectMapper。根据我的评论,您可以忽略可选的字段,而是对字符串使用自定义getter值: public static class Test { @JsonIgnore Opti

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

 @JsonRawValue
 Optional<String> data;
@JsonRawValue
可选数据;

我已经向Jdk8Module注册了ObjectMapper。

根据我的评论,您可以忽略
可选的
字段,而是对
字符串使用自定义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);
}
公共静态类测试{
@杰索尼奥雷
可选数据;
@JsonRawValue
公共字符串getDataValue(){
返回数据。orElse(空);
}
公共可选getData(){
返回数据;
}
公共无效设置数据(最终可选数据){
这个数据=数据;
}
}
公共静态void main(最终字符串[]args)引发JsonProcessingException{
最终ObjectMapper om=新ObjectMapper();
最终测试数据=新测试();
data.data=Optional.of(“Hello World”);
最终字符串值=om.writeValueAsString(数据);
系统输出打印项次(值);
}

注意:JDK8模块默认包含在此版本中。然而,使用@JsonRawValue似乎覆盖了可选的序列化,因此一个摆脱可选的自定义getter有助于实现这一点。

可能
@JsonIgnore
该字段并创建一个getter,该getter将
可选的
打开到
字符串
,并用
@JsonRawValue
注释该getter?例如,
@JsonRawValue getData(){return data.orElse(null);}
有一个可选字段是非常有用的!