Я искал решение для установки постоянного значения в отображениях 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