java - 在 Eclipse 项目中使用 MapStruct 将“脏”字符串字段映射为双精度
问题描述
鉴于:
我在我的 Eclipse 项目中使用 MapStruct 将“脏”字符串转换为数字:
String SourcePojo.area = "120,5 sqm"
double TargetPojo.area = 120.5
我可以通过以下方式将“脏”字符串转换为数字:
double extractDoubleFromString(String string) throws ParseException{
NumberFormat format = NumberFormat.getInstance(Locale.GERMAN);
return format.parse(string).doubleValue();
}
我试过的
使用 Mapstruct 我写了这个映射器:
@Mapper
public interface MyMapper {
MyMapper INSTANCE = Mappers.getMapper(MyMapper.class);
@Mapping(source="space", target="space", qualifiedByName="StringToDouble")
TargetPojo mapSourceToTarget(TargetPojo aAED);
@Named("StringToDouble")
default double extractDoubleFromString(String string) throws ParseException{
NumberFormat format = NumberFormat.getInstance(Locale.GERMAN);
return format.parse(string).doubleValue();
}
}
在生成的 MapperImpl 中,我找到了以下代码:
if ( aAED.getSpace() != null ) {
targetPojo.space( Double.parseDouble( aAED.getSpace() ) );
}
看起来根本没有使用命名方法。我仍然收到与添加之前相同的错误。
解决方案
我刚试过你的映射器
@Mapper
public interface MyMapper {
MyMapper INSTANCE = Mappers.getMapper(MyMapper.class);
@Mapping(source = "space", target = "space", qualifiedByName = "StringToDouble")
TargetPojo mapSourceToTarget(SourcePojo aAED);
@Named("StringToDouble")
default double extractDoubleFromString(String string) throws ParseException {
NumberFormat format = NumberFormat.getInstance(Locale.GERMAN);
return format.parse(string).doubleValue();
}
}
这会产生:
try {
targetPojo.setSpace( extractDoubleFromString( aAED.getSpace() ) );
}
catch ( ParseException e ) {
throw new RuntimeException( e );
}
它可能对您不起作用的一个原因是,如果您不使用org.mapstruct.Named
,而是使用@Named
其他软件包中的一些。
推荐阅读
- php - 将数字字段作为数组传递
- git - git svn clone 在初始化后卡住
- python - 如何在 spacy NLP 中创建或加载新语言?
- jasper-reports - How to hide/show and image or textField on last page?
- c# - 如何修复 C# 中的索引超出范围错误消息?
- wcf - 不支持“https”协议
- python - pyfinite 在字段 GF(2^8) 中给出错误的乘法结果
- angular - 在 BehaviorSubject 中使用 Map
- python - 如何在没有 Internet 的情况下与远程主机共享整个 python 环境?
- c# - 使用 AJAX 传递时在 IActionResult 中获取空值