【发布时间】:2016-07-08 02:23:16
【问题描述】:
我有一个带有Optional<Integer> 字段的值对象。 我希望它在序列化时看起来像一个字符串,但Optional 部分会妨碍它。
我有以下课程:
public class Person {
private com.google.common.base.Optional<Integer> age;
public com.google.common.base.Optional<Integer> getAge() {
return age;
}
public void setAge(Integer age) {
this.age = com.google.common.base.Optional.fromNullable(age);
}
}
这是我的测试:
@Test
public void testPerson() throws Exception {
ObjectMapper objectMapper = new ObjectMapper().registerModule(new GuavaModule());
Person person = new Person();
person.setAge(1);
String jsonString = objectMapper.writeValueAsString(person);
assertEquals(jsonString, "{\"age\":\"1\"}");
}
这个输出失败了:
java.lang.AssertionError: 预期 [{"age":"1"}] 但发现 [{"age":1}]
我尝试向属性添加@JsonSerialize 注释,如下所示:
@JsonSerialize(using = ToStringSerializer.class)
private com.google.common.base.Optional<Integer> age;
但是测试失败如下:
java.lang.AssertionError: 预期 [{"age":"1"}] 但发现 [{"age":"Optional.of(1)"}]
我一直在查看com.fasterxml.jackson.datatype.guava.ser.GuavaOptionalSerializer,但我似乎无法弄清楚如何正确使用它,即使它是按这种方式使用的。
我该怎么做才能让这个测试正常工作?
附:如果由我决定,我会完全删除 Optional,但这不是一个选项。
【问题讨论】:
-
我认为你在
GuavaOptionalSerializer的正确轨道上,但我不知道如何使用注释正确设置它
标签: java json jackson guava optional