Orika поддерживает общие типы, но у меня проблемы с его работой с коллекциями. Поскольку Orika не поддерживает разные стратегии сбора (кумулятивное, не кумулятивное, сиротское удаление), мне нужно написать собственный сопоставитель для обработки моих требований.Orika Generic Collection Пользовательское сопоставление
Проблема в том, что Orika не применяет этот сопоставление, а вместо этого пытается использовать обычную логику отображения коллекции.
Type<List<Document>> DOCUMENT_LIST = new TypeBuilder<List<Document>>() {}.build();
Type<List<DocumentRepresentation>> DOCUMENT_REP_LIST = new TypeBuilder<List<DocumentRepresentation>>() {}.build();
mapperFactory.classMap(DOCUMENT_LIST, DOCUMENT_REP_LIST)
.mapNulls(true)
.mapNullsInReverse(true)
.customize(new NonCumulativeListMapperDocumentToDocumentRepresentation())
.register();
public class NonCumulativeListMapperDocumentToDocumentRepresentation
extends CustomMapper<List<Document>, List<DocumentRepresentation>> {
//mapping logic
}
Я также попытался явно устанавливая список типов в родительских отображений
.fieldMap("documents", "documents")
.aElementType(Document.class)
.bElementType(DocumentRepresentation.class)
.add()
, но это также не забирается.
Любые намеки на то, что мне не хватает?
map 'Document' to' DocumentRepresentation' и использовать 'mapAsCollection'? –
@RC Мне нужно иметь доступ к обоим спискам и выполнять сопоставление из списка A в список B самостоятельно. У Dozer была 'FieldsMappingOptions.collectionStrategy (true, RelationshipType.NON_CUMULATIVE)', тогда как Orika использует только addAll из того, что я видел. Вот почему я реализовал логику в пользовательском сопоставлении. –