Я испытываю очень странное поведение с Дозером. У меня есть сложный тип с 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 создает список полей для сопоставления?
Кто-нибудь когда-нибудь сталкивался с чем-то подобным?
Заранее спасибо