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.
Advertisement
Answer
You can implement a custom serializer as follows:
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.