@ JsonDeserialize отлично работает, но если у вас больше полей, чем просто типа, вам придется установить их все вручную. Если вы хотите вернуться к Джексону, вы можете использовать:
Investment.class
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "investmentType")
@JsonTypeIdResolver(InvestmentResolver.class)
public abstract class Investment {
}
InvestmentResolver.class
public class InvestmentResolver extends TypeIdResolverBase {
@Override
public JavaType typeFromId(DatabindContext context, String id) throws IOException {
Investment investment = InvestmentFactory.getTypeFromString(type);
return context.constructType(investment.getClass());
}
Прелесть этого в том, что если вы начнете добавлять поля в раздел «Инвестиции», вам не нужно будет добавлять их в десериализаторе (по крайней мере, это случилось со мной в моем случае), но вместо этого Джексон позаботится об этом за вас. , Итак, завтра у вас может быть тестовый набор:
'[{"investmentType":"Bond","investmentName":"ABC"},{"investmentType":"Equity","investmentName":"APPL"}]'
Тебе должно быть хорошо идти!