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.