我有一个Optional<Integer>
字段值对象。 我希望它看起来像一个字符串,当它被序列化时,但Optional
部分阻碍。使用杰克逊序列化番石榴可选<Integer>作为字符串
我有以下类:
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);
}
}
这里是我的测试:
java.lang.AssertionError: expected [{"age":"1"}] but found [{"age":1}]
我曾尝试加入@JsonSerialize
注释:
@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\"}");
}
它与该输出失败财产,如下所示:
@JsonSerialize(using = ToStringSerializer.class)
private com.google.common.base.Optional<Integer> age;
但随后的测试失败是这样的:
java.lang.AssertionError: expected [{"age":"1"}] but found [{"age":"Optional.of(1)"}]
我一直在寻找周围com.fasterxml.jackson.datatype.guava.ser.GuavaOptionalSerializer
,但我似乎无法弄清楚如何正确地使用它,如果即使它的意思是用这种方式。
我该怎么做才能使这个测试工作?
P.S.如果取决于我,我会完全删除可选项,但这不是一个选项。
我认为你是正确的轨道'GuavaOptionalSerializer'上,但我不” t知道如何正确设置它使用注释 – njzk2