我通过使用MixIn和自定义反序列化程序解决了这个问题,如下所示:
public abstract class LegacyClassMixIn
@JsonDeserialize(using = LegacyEnumDeserializer.class)
abstract LegacyEnum getLegacyEnum();
public class LegacyEnumDeserializer extends JsonDeserializer implements ContextualDeserializer {
private JavaType valueType;
@Override
public JsonDeserializer createContextual(DeserializationContext context, BeanProperty property) {
JavaType wrapperType = property.getType();
LegacyEnumDeserializer deserializer = new LegacyEnumDeserializer();
deserializer.valueType = wrapperType;
return deserializer;
}
@Override
public LegacyEnumSuperclass deserialize(JsonParser parser, DeserializationContext context) throws IOException {
return LegacyEnumSuperclass.getEnum(valueType.getRawClass(), parser.readValueAs(String.class));
}
valueType.getRawClass()退货LegacyEnum.class,这样我就可以对继承LegacyEnumSuperclass类的所有“enum”使用一个反序列化器。getEnum是来自遗留代码的自定义方法。
@Configuration
public class ObjectMapperConfig {
public ObjectMapperConfig(ObjectMapper objectMapper) {
objectMapper.addMixIn(LegacyClass.class, LegacyClassMixIn.class);
}
}
谢谢你的线索。