[英]Custom BigInteger JSON serializer
我正在嘗試實現自定義 JSON 序列化程序類以在 JSON 響應中將對象BigInteger
值顯示為字符串。
我已經實現了一個自定義序列化器類
public class CustomCounterSerializer extends StdSerializer<BigInteger> {
private static final long serialVersionUID = 5440920327083673598L;
public CustomCounterSerializer() {
this(BigInteger.class);
}
public CustomCounterSerializer(Class<BigInteger> vc) {
super(vc);
}
@Override
public void serialize(BigInteger value, JsonGenerator jsonGenerator, SerializerProvider provider) throws IOException {
BigInteger valueJson = value==null ? BigInteger.valueOf(0) : value;
jsonGenerator.writeString(valueJson.toString());
}
}
我遇到的問題是我想使用覆蓋的方法處理null
對象值並將0
傳遞給 JSON 字符串而不是null
。
我為此編寫了一個 JUnit 測試:
public class CustomCounterSerializerTest {
private ObjectMapper objectMapper = new ObjectMapper();
@After
public void tearDown() {
objectMapper = null;
}
@Test
public void testCustomSerializerWithNullValues() throws JsonParseException, JsonMappingException, IOException {
MyObject obj = new MyObject();
obj.setNonNullValue(BigInteger.valueOf(1);
String obj_ = objectMapper.writeValueAsString(obj);
assertThat(obj_).isNotNull();
assertTrue(obj_.contains("\"nonNullValue\":\"" + BigInteger.valueOf(1).toString() + "\",\"nullValue\":\""+ BigInteger.valueOf(0).toString() +"\""));
}
}
它失敗,因為它包含null
而不是nullValue:"0"
。
但是對象的null
值總是沒有參數構造函數,甚至像this(BigInteger.class)
不使用我的方法並打印null
。
您需要告訴 Jackson 它應該使用您的序列化程序,即使是空值。 您可以通過同時使用帶有@JsonSerializer
參數的nullsUsing
來執行此操作。
在您的 MyObject 類中,它看起來像這樣:
@JsonSerialize(using = CustomCounterSerializer.class,
nullsUsing = CustomCounterSerializer.class)
private BigInteger nullValue;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.