Зависит от реализации, используемой вами. В Jackson это делается так:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = Bla.class, name = "Bla"),
@JsonSubTypes.Type(value = Bla2.class, name = "Bla2")
})
interface IBla {}
Аннотацией @JsonSubTypes вы указываете список
всех возможных реализаций интерфейса.
JsonTypeInfo определяет, что во входящем JSON будет поле "type", которое сообщит о том, к какому типу привести абстрактный IBla при получении JSON-сообщения.