如何在Mapstruct中将空字符串转换为Long?

时间:2017-07-11 11:29:36

标签: java spring mapstruct

如何将Stringtruct mapper配置为在将String转换为Long时检查为空为空。

    if ( entityOld.getNumber() != null ) {
        entityNew.setNumber( Long.parseLong( entityOld.getNumber() ) );
    }

我得到的例外是:

java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[na:1.8.0_131]
at java.lang.Long.parseLong(Long.java:601) ~[na:1.8.0_131]

所以基本上如果字符串为空,我希望将其视为具有值“0”。

2 个答案:

答案 0 :(得分:5)

添加带有自定义映射方法的手写映射器,并通过@Mapper#uses()注册此映射器:

public class MyStringLongMapper {

    public Long stringToLong(String string) {
        return string != null && !string.isEmpty() ? Long.parseLong( string ) : null;
    }

}

此手写方法优先于StringLong的内置转换。

答案 1 :(得分:1)

一个不太优雅的解决方案是为每个字段转换添加表达式

@Mapping(
    target = "newField",
    expression = "java(Long.parseLong(oldEntity.oldField().isEmpty() ? \"0\" : oldEntity.oldField()))")