Car*_*lik 1 java serialization json java-8
我面临以下问题:我有一个类作为数据成员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;
}
}
Run Code Online (Sandbox Code Playgroud)
当我把它变成一个json我得到这样的东西:
Optional[
object
]
Run Code Online (Sandbox Code Playgroud)
我想摆脱json中的Optional部分.我能这样做吗?
有多个Java库可用于序列化/反序列化.其中一个是优秀的杰克逊图书馆,您可以在这里以细粒度的方式调整序列化.
如果您拥有POJO的源代码,MyClass您只需添加一些注释即可使其正常工作.
如果你认为MyCustomObject看起来像这样:
public class MyCustomObject {
private final String myVal;
public MyCustomObject(String myVal) {
this.myVal = myVal;
}
public String getMyVal() {
return myVal;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您的MyClass对象可以像这样声明(注意注释 @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);
}
}
Run Code Online (Sandbox Code Playgroud)
最后,您可以使用以下代码序列化为JSON:
ObjectMapper mapper = new ObjectMapper();
final String json = mapper.writeValueAsString(
new MyClass(Optional.ofNullable(new MyCustomObject("Yes, my value!"))));
Run Code Online (Sandbox Code Playgroud)
上面代码中的神奇之处在于使用ObjectMapper来处理数据绑定,即在POJO和JSON之间进行转换(反之亦然).
另一种方法,如果您不拥有MyClass该类的源代码,即您无法修改它,则可以创建一个自定义序列化程序,如Jackson文档中所述.
| 归档时间: |
|
| 查看次数: |
1187 次 |
| 最近记录: |