给出:
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:
@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() ) );
}
似乎根本没有使用命名方法。我仍然收到与添加之前相同的错误。
答案 0 :(得分:0)
我刚刚尝试过您的映射器
string tem=Character.toString(your_character)
这会生成:
def format_custom_text(string, values):
# Unpack the values
return string.format(*values)
values = [
13,
['cinnamon raisin', 'maple'],
'years'
]
# You don't need a dictionary to store the examples
examples = [
"There are {} bagels in a bakers dozen.",
"My favorite bagels are {} and {}.",
"I have not had a pop tart in 14 {}."
]
for single_example in zip(examples, values):
# Convert each value inside the values list into a list
placeholder_values = []
if not type(single_example[1]) == list:
placeholder_values.append(single_example[1])
else:
placeholder_values = single_example[1]
它可能对您不起作用的一个原因是,如果您不使用@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 );
}
。
答案 1 :(得分:0)
该代码完全可以正常运行。 造成这种情况的原因不是,正常的Eclipse Builder不会通过Maven构建过程来调用MapStruct。 (至少对于我的设置是正确的)
在完成完整的maven干净安装后,创建了新的映射器,并且一切正常。