Jackson JSON custom serialization for certain fields

jackson, java, json, serialization

Solution

You can implement a custom serializer as follows:

import com.fasterxml.jackson.databind.JsonSerializer
import com.fasterxml.jackson.databind.SerializerProvider
import com.fasterxml.jackson.core.JsonGenerator

public class Person {
    public String name;
    public int age;
    @JsonSerialize(using = IntToStringSerializer.class, as=String.class)
    public int favoriteNumber:
}

 
public class IntToStringSerializer extends JsonSerializer<Integer> {
  
    @Override
    public void serialize(Integer tmpInt, 
                          JsonGenerator jsonGenerator, 
                          SerializerProvider serializerProvider) 
                          throws IOException, JsonProcessingException {
        jsonGenerator.writeObject(tmpInt.toString());
    }
}

Java should handle the autoboxing from `int` to `Integer` for you.

Problem

Is there a way using Jackson JSON Processor to do custom field level serialization? For example, I'd like to have the class ``` public class Person { public String name; public int age; public int favoriteNumber; } ``` serialized to the follow JSON: ``` { "name": "Joe", "age": 25, "favoriteNumber": "123" } ``` Note that age=25 is encoded as a number while favoriteNumber=123 is encoded as a string. Out of the box Jackson marshalls `int` to a number. In this case I want favoriteNumber to be encoded as a string.

Original source

Related problems