Я пытаюсь реализовать пользовательский класс сериализатора JSON для отображения значений объекта BigInteger
в виде строки в ответе JSON.
Я реализовал пользовательский класс сериализатора
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
объекта всегда идет без конструктора args и даже как this(BigInteger.class)
не использую мой метод и печатает null
.