The Java configuration in Spring Boot for Gunjan's answer can be as following:
Create the custom converter as a bean as below:
@Component
public class LoadableFooBeanConverter extends DozerConverter<BarBean, FooBean> {
private final Util util; // Any beans that need to be injected into the custom converter
@Autowired // Constructor Injection
public LoadableFooBeanConverter(Util util) {
super(BarBean.class, FooBean.class);
this.util = util;
}
@Override
public FooBean convertTo(final BarBean source, final FooBean destination) {
// Your logic
}
@Override
public BarBean convertFrom(final FooBean source, final BarBean destination) {
// Your logic
}
}
Create the Mapper component and register the custom converter as below:
@Component
@RequiredArgsConstructor // lombok annotation
public class DozerMapper {
@Autowired
private final LoadableFooBeanConverter loadableFooBeanConverter;
@Getter // lombok annotation
private Mapper mapper;
@PostConstruct
public void init() {
this.mapper = DozerBeanMapperBuilder.create()
.withMappingBuilders(BarMappingBuilder.builder().build())
.withCustomConverterWithId("loadableFooBeanConverter", loadableFooBeanConverter)
.build();
}
@Builder // lombok annocation
private static class BarMappingBuilder extends BeanMappingBuilder {
@Override
protected void configure() {
mapping(FooBar.class, FooBarFoo.class)
.fields("fooBean", "barBean", FieldsMappingOptions.customConverterId("loadableFooBeanConverter"));
}
}
}