Custom converter in ModelMapper not working(ModelMapper中的自定义转换器不起作用)
问题描述
我有一个将双精度值转换为字符串的转换器。在转换之前,我想将双精度数格式化为固定的小数位数。但我注意到,它没有被援引。以下是我的方法:
我的两个模型具有相同的属性名称。
private String price; // my DTO
private Double price; // my JPA entity
这是我的模型映射器BeanModelMapperConfig.java
:
public ModelMapper modelMapper() {
ModelMapper modelMapper = new ModelMapper();
modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
modelMapper.getConfiguration().setAmbiguityIgnored(true);
modelMapper.addConverter(convertDoubleToString());
return modelMapper;
}
private Converter<Double, String> convertDoubleToString() {
return mappingContext -> Utility.formatDoubleToString(mappingContext.getSource());
}
ModelMapper
正在将我的Double
映射到String
。
但它不符合格式化的小数位。知道我错过了什么吗?
推荐答案
将转换器直接添加到模型映射器,如下所示:
modelMapper.addConverter(convertDoubleToString());
如果实现Converter接口,对我来说从来都不是很有效。幸运的是,您可以根据TypeMap注册您的转换器,因此这应该可以工作:
modelMapper.createTypeMap(Double.class, String.class)
.setConverter(convertDoubleToString());
另一种成功注册的方法是扩展AbstractConverter,这是一种更难看的方法:
private AbstractConverter<Double, String> convertDoubleToString =
new AbstractConverter<>() {
@Override
protected String convert(Double src) {
return Utility.formatDoubleToString(src);
}
};
这样就行了:
modelMapper.addConverter(convertDoubleToString);
区别可能在于(所以只是猜测),由于类型擦除,在实现接口时,ModelMapper可能无法正确关联转换器,因此它需要显式类型映射。
这篇关于ModelMapper中的自定义转换器不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:ModelMapper中的自定义转换器不起作用
基础教程推荐
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01