2015-11-16 1 views
0

У меня есть список Car s (фактически ObservableList, в ReadOnlyObjectWrapper), и у меня есть расписание, которое имеет массив из этих Car s. Я хочу сделать, чтобы автомобили в списке были @JsonManagedReference, а автомобили в расписании - @JsonBackReference.Как настроить управляемую ссылку в списке с Джексоном?

Вот управляемая ссылка часть:

private final ReadOnlyObjectWrapper<ObservableList<Car>> cars = new ReadOnlyObjectWrapper<>(new ObservableList(carExtractor())); 

@JsonManagedReference("car") 
@SuppressWarnings("unused") // Called by Jackson to deserialize cars 
private void setCars(ObservableList<Car> cars){ 
    this.cars.set(cars); 
} 

А вот моя обратная ссылка часть (график):

@JsonBackReference("car") 
private Car[] lanes; 

Но когда я пытаюсь десериализации это, я получаю это:

Caused by: java.lang.IllegalArgumentException: Can not handle managed/back reference 'car': no back reference property found from type [collection type; class com.neonorb.commons.ObservableList, contains [simple type, class com.neonorb.derbypro.core.Car]] 

Я думал, простой способ исправить это, чтобы иметь микширование и применить это к списку, чтобы сами автомобили получают управляемый ссылочный атрибут, а не список. Но проблема в том, что у меня есть несколько списков с разными типами (то есть Group), поэтому я не могу применить это ко всему классу ObservableList.

Раньше в расписании у меня был номер индекса для места в списке, мы хотели, но это может раздражать переупорядочивание списка и тому подобное. Я хочу чистое указание, а не индекс.

Я не хочу, чтобы массив в расписании был ссылкой на список, я хочу, чтобы каждый автомобиль в массиве был ссылкой на каждый автомобиль в списке.

ответ

0

Мне не нужен этот управляемый/обратный справочный материал. Все, что я сделал, это аннотация для компонента, который мне нужен только для одного из:

@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id") 

Работает как очарование!

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