ModelMapper中的自定义转换器不起作用 [英] Custom converter in ModelMapper not working

查看:25
本文介绍了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中的自定义转换器不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆