如何在 Mapstruct 中将空字符串转换为 Long?
How to Convert empty string to Long in Mapstruct?
如何配置 mapstruct 映射器以在将 String 转换为 Long 时不仅检查 null 而检查空值。
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”。
一个不太优雅的解决方案是为每个字段转换添加表达式
@Mapping(
target = "newField",
expression = "java(Long.parseLong(oldEntity.oldField().isEmpty() ? \"0\" : oldEntity.oldField()))")
添加自定义映射方法的手写映射器,并通过@Mapper#uses()
注册此映射器:
public class MyStringLongMapper {
public Long stringToLong(String string) {
return string != null && !string.isEmpty() ? Long.parseLong( string ) : null;
}
}
此手写方法将优先于从 String
到 Long
的内置转换。
如何配置 mapstruct 映射器以在将 String 转换为 Long 时不仅检查 null 而检查空值。
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”。
一个不太优雅的解决方案是为每个字段转换添加表达式
@Mapping(
target = "newField",
expression = "java(Long.parseLong(oldEntity.oldField().isEmpty() ? \"0\" : oldEntity.oldField()))")
添加自定义映射方法的手写映射器,并通过@Mapper#uses()
注册此映射器:
public class MyStringLongMapper {
public Long stringToLong(String string) {
return string != null && !string.isEmpty() ? Long.parseLong( string ) : null;
}
}
此手写方法将优先于从 String
到 Long
的内置转换。