После преобразования в dto порядок дочерних наборов перемешивается

#mapstruct

#mapstruct

Вопрос:

После преобразования в dto с использованием mapstruct порядок дочерних идентификаторов перемешивается. Если я верну только объект без преобразования в dto, дочерний элемент будет правильно упорядочен

«данные»: [ { «PersonName»:»TestUser», «автомобили»: [ { «id»: «2021-000001» }, { «id»: «2021-000003» }, { «id»: «2021-000002» }, { «id»: «2021-000004» } } ]

Ответ №1:

Причина, по которой порядок отличается, связана с тем, что HashSet MapStruct по умолчанию использовал a при отображении в a Set .

Текущие типы реализации для MapStruct следующие:

Тип интерфейса Тип реализации
Iterable ArrayList
Collection ArrayList
List ArrayList
Set HashSet
SortedSet TreeSet
NavigableSet TreeSet
Map HashMap
SortedMap TreeMap
NavigableMap TreeMap
ConcurrentMap ConcurrentHashMap
ConcurrentNavigableMap ConcurrentSkipListMap

Это можно увидеть в типах реализации, используемых для сопоставления коллекций

В настоящее время существует запрос функции на изменение этого в набор / карту, сохраняющий порядок, и он будет включен в 1.5.

На данный момент вы можете исправить это, используя an, @ObjectFactory который вернет LinkedHashSet