2015-09-23 6 views
3

У меня есть такая конфигурация на родительский класс:Джексон Polymorfic @JsonTypeInfo атрибут типа всегда нуль

@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME, 
include = JsonTypeInfo.As.EXISTING_PROPERTY, 
property = "type", 
visible = true 
) 
@JsonSubTypes({ 
@JsonSubTypes.Type(value = AnalysisViewer.class, name = "ANALYSIS"), 
@JsonSubTypes.Type(value = CombinedAnalysisViewer.class, name = "COMBINED"), 
@JsonSubTypes.Type(value = SingleSourceViewer.class, name = "SINGLESOURCE"), 
@JsonSubTypes.Type(value = SingleSourceGroupViewer.class, name = "SINGLESOURCE_GROUP") 
}) 

А класс имеет следующий type атрибут, который мне нужно сохраняться в базе данных (с JPA).

public class Viewer { 
    ... 
    @Column(name = "TP_VIEWER") 
    @Enumerated(EnumType.STRING) 
    private ViewerTypeEnum type; 
    ... 
} 

С помощью этой конфигурации или изменений в visible=false и include=JsonTypeInfo.As.PROPERTY я либо получаю сообщение об ошибке на сериализации о том, что это не возможно, чтобы написать два раз то же свойство, или ошибку, говоря, что я не могу сохранить нулевое значение в колонке type.

Что мне нужно - это иметь атрибут типа в базе данных И использовать его, чтобы научить Джексона подтипам. Я пробовал много разных конфигураций, и я не могу найти документацию по хранению и заполнению свойства при десериализации. Может ли кто-нибудь помочь мне с этим?

Заранее спасибо.

ответ

4

Добавить параметр visible в @JsonTypeInfo и сделать его true. По умолчанию это false:

@JsonTypeInfo(..., visible = true) 

Из JsonTypeInfo документации:

собственности, который определяет, будет ли значение идентификатора типа передается как часть JSON потока в десериализатор (истина), либо обращаться и удаляют TypeDeserializer (false). Свойство не влияет на сериализацию.

Значение по умолчанию равно false, что означает, что Джексон обрабатывает и удаляет идентификатор типа из содержимого JSON, передаваемого JsonDeserializer.

Смежные вопросы