Явная десериализация подкласса без идентификатора классаJAVA

Программисты JAVA общаются здесь
Anonymous
Явная десериализация подкласса без идентификатора класса

Сообщение Anonymous »

В Джексоне у меня есть интерфейс и подклассы, которые раньше сериализовались/десериализовались только явно. Я пытаюсь внести изменения, чтобы разрешить сериализацию/десериализацию интерфейса напрямую, и добавил аннотации @JsonSubTypes и @JsonTypeInfo.

Код: Выделить всё

@JsonSubTypes({
@JsonSubTypes.Type(
value = DataProcessingJob.class,
name = "data_processing_job")
})
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
public interface JobDefinition {
...
}

public record DataProcessingJob() implements JobDefinition {
...
}

Код: Выделить всё

private static final ObjectMapper OBJECT_MAPPER =
Json.mapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
OBJECT_MAPPER.readValue(jsonBlob, DataProcessingJob.class);
Это работает для сериализации заданий в этом формате. Однако в базе данных все еще есть старые задания, которые не имеют свойства type и в результате создают:

Причина: com.fasterxml.jackson.databind.exc.InvalidTypeIdException: не удалось разрешить подтип [простой тип, класс models.job.DataProcessingJob]: отсутствует идентификатор типа свойства 'type'

Что вполне логично, у этих заданий нет идентификатора типа type . Однако есть ли способ позволить Джексону десериализовать эти старые задания без аннотации типа? На данный момент мы знаем тип, который нужно сериализовать, DataProcessingJob в этом примере.
Могу ли я десериализовать подкласс явно без его свойства идентификатора типа в самом JSON?

Вернуться в «JAVA»