4

com.google.common.base.Optional 是否有 Json 序列化器/反序列化器?

开箱即用,这似乎不适用于杰克逊,见下文:

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);
}

}

-> {"myString":{"present":true}}

4

3 回答 3

12

GitHub 上确实有Jackson 的Guava 模块,但不支持 Optional(尚)。似乎是一个相当简单的序列化器/反序列化器来实现;该行为应该与@JsonUnwrapped 非常相似,因此对于您的简单测试,结果应该是:

{"myString":"testString"}

对于 Optional.absent,序列化形式应该是:

{"myString":null}

更新:看起来很简单,所以我刚刚实现了它并将其推送到 GitHub。您可以通过官方 repo 获取它并从源代码构建,或者等待下一个正式版本。享受!

于 2012-05-25T13:33:15.680 回答
3

这里有一个带有 Guava Jackson 序列化器/反序列化器的库。然而,没有人为optional. 但这是一个非常基础的课程,您可以按照那里的示例轻松自己编写一个。然后您可以将代码传递给Tatu,以便他将其添加到库中,这将不胜感激。

于 2012-05-23T23:08:39.217 回答
0

我有同样的问题,我通过使用 JsonSerializer 和 JsonDeserializer 作为如何使用 JSON 序列化/反序列化 Option<> 类(函数式 Java)来解决我的问题?. 希望这可以帮助。

于 2014-04-09T12:33:43.377 回答