gpt4 book ai didi

java - 我可以仅将 java.util.Optional 中的值序列化为 json 吗?

转载 作者:行者123 更新时间:2023-11-29 07:43:08 25 4
gpt4 key购买 nike

我面临以下问题:我有一个类作为数据成员 java.util.Optional 对象,我需要将其转换为 json。代码看起来像这样的通用方式:

public class MyClass{

public java.util.Optional<MyCustomObject> object;

public Myclass(java.util.Optional<MyCustomObject> object){
this.object = object;
}

public java.util.Optional<MyCustomObject> getObject(){
return this.object;
}

public void setObject(java.util.Optional<MyCustomObject> object){
return this.object = object;
}
}

当我把它变成一个 json 时,我得到这样的东西:

Optional[
object
]

我想从 json 中删除可选部分。我可以这样做吗?

最佳答案

有多个 Java 库可用于序列化/反序列化。其中之一是 excellent Jackson library您可以在其中以细粒度的方式调整序列化。

如果您拥有 POJO MyClass 的源代码,您只需添加一些注释即可使其正常工作。

如果您假设 MyCustomObject 如下所示:

public class MyCustomObject {
private final String myVal;

public MyCustomObject(String myVal) {
this.myVal = myVal;
}

public String getMyVal() {
return myVal;
}
}

然后,您的 MyClass 对象可以这样声明(注意 annotations @JsonIgnore@JsonProperty):

public class MyClass {
private Optional<MyCustomObject> object;

public MyClass(Optional<MyCustomObject> object) {
this.object = object;
}

// Ignore the "normal" serialization
@JsonIgnore
public Optional<MyCustomObject> getObject() {
return this.object;
}

public void setObject(Optional<MyCustomObject> object) {
this.object = object;
}

// This handles the serialization
@JsonProperty("object")
private MyCustomObject getObjectAndYesThisIsAPrivateMethod() {
return getObject().orElse(null);
}
}

最后,您可以使用以下代码序列化为 JSON:

ObjectMapper mapper = new ObjectMapper();
final String json = mapper.writeValueAsString(
new MyClass(Optional.ofNullable(new MyCustomObject("Yes, my value!"))));

上面代码中的魔法在于使用了ObjectMapper。它处理数据绑定(bind),即 POJO 和 JSON 之间的转换(反之亦然)。


另一种方法,如果您不拥有 MyClass 类的源代码,即您无法修改它,那就是创建自定义序列化程序 as described in the Jackson docs .

关于java - 我可以仅将 java.util.Optional 中的值序列化为 json 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28213459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com