Question Details

No question body available.

Tags

java json jackson

Answers (1)

Accepted Answer Available
Accepted Answer
July 4, 2025 Score: 4 Rep: 679 Quality: High Completeness: 60%

Using AbstractTypeResolver

You can use AbstractTypeResolver to add rules on what desired class to instantiate on deserialization.

Let's set a rule to always deserialize Number as BigDecimal. You can create the ObjectMapper like this:

var builder = JsonMapper.builder();

var resolver = new SimpleAbstractTypeResolver(); resolver.addMapping(Number.class, BigDecimal.class); resolver.addMapping(...); resolver.addMapping(...);

var module = new SimpleModule(); module.setAbstractTypes(resolver);

builder.addModule(module);

return builder.build();

Using Module only

If you don't have a need to add an additional layer of abstraction, simply add type mapping on the Module itself the following way:

var builder = JsonMapper.builder();

var module = new SimpleModule(); module.addAbstractTypeMapping(Number.class, BigDecimal.class);

builder.addModule(module);

return builder.build();

Test

@Test
void shouldDeserializeAsBigInteger() throws JsonProcessingException {
  Integer a = 2;

var serialized = objectMapper.writeValueAsString(a); var deserialized = objectMapper.readValue(serialized, Number.class);

assertThat(deserialized).isInstanceOf(BigDecimal.class); }