Dozer: Поле перезаписывается исходным значением после успешной конвертации - PullRequest
1 голос
/ 20 апреля 2020

Я испытываю очень странное поведение с Дозером. У меня есть сложный тип с 2 атрибутами, которые нужно объединить в строку, ничего сумасшедшего.

Вот мой конвертер:

@Component
public class CatalogEntryRequestRDToStringConverter extends DozerConverter<CatalogEntryRequestRD, String> {

    public CatalogEntryRequestRDToStringConverter() {
        super(CatalogEntryRequestRD.class, String.class);
    }

    public CatalogEntryRequestRDToStringConverter(Class<CatalogEntryRequestRD> prototypeA, Class<String> prototypeB) {
        super(prototypeA, prototypeB);
    }

    @Override
    public String convertTo(CatalogEntryRequestRD source, String destination) {
        if (source != null) {
            return ConverterUtil.concatenateCodeAndVersion(getParameter(), source.getCode(), source.getVersion());
        }
        return null;
    }

    @Override
    public CatalogEntryRequestRD convertFrom(String source, CatalogEntryRequestRD destination) {
        return null;
    }

Вот как я сопоставляю эти типы:

mapping(StartBorderRequest.class, StartBorderRequestMessageType.class)
        .fields("request.scopeModifiers", "scopeModifiers")
        .fields("request.collectedData", "collectedData")
        .fields("request.selectedResponseData", "selectedResponseData");


mapping(com.test.types.CollectedDataRequestType.class, com.test.message.CollectedDataRequestType.class)
    .fields("tcnType", "tcnType", fieldMappingBuilder -> {
        fieldMappingBuilder.customConverter("CatalogEntryRequestRDToStringConverter");
        fieldMappingBuilder.customConverterParam("tcnTypeId");
    });

Конвертер работает. Он вызывается правильно, и преобразование прошло успешно. Однако после некоторой отладки я заметил, что метод set поля назначения снова вызывается в конце процесса отображения со значением метода toString () для CatalogEntryRequestRD. Поэтому мое правильно преобразованное поле перезаписывается source.toString (). Наверное, это как-то связано с тем, как Dozer создает список полей для сопоставления?

Кто-нибудь когда-нибудь сталкивался с чем-то подобным?

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

...