com.google.common.base.Optional是否有Json Serializer / Deserializer?
开箱即用,这似乎不适用于杰克逊,见下文:
package com.example;
import java.io.IOException;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import com.google.common.base.Optional;
public class TestClass {
public Optional<String> myString;
public TestClass() {
myString = Optional.of("testString");
}
public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException {
TestClass testClass = new TestClass();
ObjectMapper objectMapper = new ObjectMapper();
String jsonString = objectMapper.writeValueAsString(testClass);
System.out.println(jsonString);
}
}
- &GT; { “的myString”:{ “存在”:真}}
答案 0 :(得分:12)
GitHub上的Jackson确实有Guava module,但尚未支持Optional。看起来像一个相当简单的串行器/解串器来实现;行为应该与@JsonUnwrapped非常相似,所以对于你的简单测试,结果应该是:
{ “的myString”: “的TestString”}
对于Optional.absent,序列化表格应为:
{ “的myString”:空}
更新:看起来很简单,所以我刚刚实现了它并将其推送到GitHub。您可以通过官方仓库获取并从源代码构建,或等待下一个正式版本。享受!
答案 1 :(得分:3)
有一个带有Guava Jackson序列化器/反序列化器here的库。但是optional
没有人。但这是一个非常基础的课程,你可以轻松地自己编写一个样本。然后你可以将代码传递给Tatu,这样他就可以将它添加到库中了,这将是值得赞赏的。
答案 2 :(得分:0)
我有同样的问题,我通过使用JsonSerializer和JsonDeserializer作为How to serialize / deserialize a Option<> class (functional java) with JSON?解决了我的问题。希望这会有所帮助。