How to instruct Jackson to serialize a field inside an Object instead of the Object it self?
jackson, java, serialization
Solution
You need to create and use a custom serializer.
public class ItemTypeSerializer extends JsonSerializer<ItemType>
{
@Override
public void serialize(ItemType value, JsonGenerator jgen,
SerializerProvider provider)
throws IOException, JsonProcessingException
{
jgen.writeString(value.name);
}
}
@JsonSerialize(using = ItemTypeSerializer.class)
class ItemType
{
String name;
int somethingElse;
}
Problem
I have an `Item` class. There's an `itemType` field inside of that class which is of type ItemType. roughly, something like this. ``` class Item { int id; ItemType itemType; } class ItemType { String name; int somethingElse; } ``` When I am serializing an object of type `Item` using Jackson `ObjectMapper`, it serializes the object `ItemType` as a sub-object. Which is expected, but not what I want. ``` { "id": 4, "itemType": { "name": "Coupon", "somethingElse": 1 } } ``` What I would like to do is to show the `itemType`'s `name` field instead when serialized. Something like below. ``` { "id": 4, "itemType": "Coupon" } ``` Is there anyway to instruct Jackson to do so?