我試圖在POJO中使用Optional來指示何時json字段可以爲空,不存在或存在。我的問題是,我不知道如何配置傑克遜不會像Optional.empty()
和null
一樣。對於empty()
,我希望該字段被忽略。 JsonInclude值沒有一個可以做到這一點。 Jdk8Module#configureAbsentsAsNulls()
看起來很有前途,但它不會改變我的測試結果。有沒有辦法做到這一點?Jackson可選字段爲空()vs null
TL;博士 null
值應被序列化,Optional.empty()
不應被序列化。
以下是一些展示我試圖實現的行爲的測試。
class POJO {
public Optional<String> content;
}
private ObjectMapper getMapper() {
return new ObjectMapper().registerModule(new Jdk8Module());
}
@org.junit.Test
public void testAbsent() throws JsonProcessingException {
ObjectMapper mapper = getMapper();
POJO pojo = new POJO();
pojo.content = Optional.empty();
String result = mapper.writeValueAsString(pojo);
assertEquals("{}", result);
}
@org.junit.Test
public void testNull() throws JsonProcessingException {
ObjectMapper mapper = getMapper();
POJO pojo = new POJO();
pojo.content = null;
String result = mapper.writeValueAsString(pojo);
assertEquals("{\"content\":null}", result);
}
@org.junit.Test
public void testPresent() throws JsonProcessingException {
ObjectMapper mapper = getMapper();
POJO pojo = new POJO();
pojo.content = Optional.of("Hello");
String result = mapper.writeValueAsString(pojo);
assertEquals("{\"content\":\"Hello\"}", result);
}
請你張貼小例子你期望通過但失敗的測試用例(例如,配置映射器,將字段設置爲空,序列化,顯示輸出)? – chrylis
只是增加了一些測試。對不起,他們不在那裏開始。 – Panda
正如我在原始問題(並在測試中指出的)中所說的,null應該被序列化並且empty()不應該。這不是模塊的默認行爲。這個問題並沒有回答如何實現這種行爲。 – Panda