Установите константу строки в Dozer с помощью пользовательского конвертера - PullRequest
0 голосов
/ 14 мая 2019

Я искал решение для установки постоянного значения в отображениях Dozer и прочитал много ответов на этот вопрос в stackoverflow.Поэтому я решил использовать собственный конвертер бульдозера.

Позвольте мне прояснить мою ситуацию.

У меня есть два компонента со следующими полями:

Bean A:

String name;

String phone;

String bankId;

Bean B:

String branch;

String phone;

String name;

String bankId;

Поле branch Bean B всегда должно равняться "1111".

Итак, я создал собственный конвертер:

public class ConstantToTypeConverter extends DozerConverter<String, String> {

    public ConstantToTypeConverter() {
        super(String.class, String.class);
    }

    @Override
    public String convertTo(String source, String destination) {
        if (getParameter().equalsIgnoreCase("TYPE")) {
            return "1111";
        }
        return null;
    }

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

и следующее отображение:

<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozer.sourceforge.net"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://dozer.sourceforge.net
          http://dozer.sourceforge.net/schema/beanmapping.xsd">
    <mapping type="one-way" map-id="map-test">
        <class-a>BeanA</class-a>
        <class-b>BeanB</class-b>
        <field custom-converter="ConstantToTypeConverter"
               custom-converter-param="TYPE">
            <!-- Can use any existing field of String here, since there is a custom converter -->
            <a>name</a>
            <b>branch</b>
        </field>
    </mapping>
</mappings>

Он отлично работает и устанавливает значение branch на "1111".Но этот подход выглядит ужасно:

<!-- Can use any existing field of String here, since there is a custom converter -->
                <a>name</a>
                <b>branch</b>

Мне пришлось установить поле name в качестве источника в сопоставлении XML только для запуска моего пользовательского конвертера, поскольку Dozer требует поля источника и назначения, даже если поле источникана самом деле не нужно.Как правило, это делает мой код неясным и сложным в обслуживании

Полагаю, я ошибся или использовал этот подход ненадлежащим образом.Кто-нибудь может пролить свет на эту проблему?

Я использую Dozer 5.5.1

...