簡體   English   中英

自定義 BigInteger JSON 序列化程序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM