Sri*_*har 6 java string mapping boolean mapstruct
我的模型类中有几个Boolean字段(源)。我的 DTO 类中的目标字段是String. 我需要映射trueasY和falseas N。有超过 20 个Boolean字段,现在我正在使用 20 多个@Mapping带有expression选项的注释,这是开销。一定有一个我不知道的简单方法或解决方案。任何人都可以帮助简化这个吗?
我正在使用mapstruct版本1.2.0.Final
源码.java
class Source{
private Boolean isNew;
private Boolean anyRestriction;
// several Boolean fields
}
Run Code Online (Sandbox Code Playgroud)
目标.java
class Target{
private String isNew;
private String anyRestriction;
}
Run Code Online (Sandbox Code Playgroud)
助手.java
class Helper{
public String asString(Boolean b){
return b==null ? "N" : (b ? "Y" : "N");
}
}
Run Code Online (Sandbox Code Playgroud)
MyMapper.java
@Mapper interface MyMapper{
@Mappings(
@Mapping(target="isNew", expression="java(Helper.asString(s.isNew()))"
// 20+ mapping like above, any simple way ?
)
Target map(Source s);
}
Run Code Online (Sandbox Code Playgroud)
类似于Map Struct Reference#Invoking Other Mappers,您可以定义(您的 Helper)类,如下所示:
public class BooleanYNMapper {
public String asString(Boolean bool) {
return null == bool ?
null : (bool ?
"Y" : "N"
);
}
public Boolean asBoolean(String bool) {
return null == bool ?
null : (bool.trim().toLowerCase().startsWith("y") ?
Boolean.TRUE : Boolean.FALSE
);
}
}
Run Code Online (Sandbox Code Playgroud)
..然后在映射器(的层次结构)中使用它:
@Mapper(uses = BooleanYNMapper.class)
interface MyMapper{
Target map(Source s);
//and even this will work:
Source mapBack(Target t);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18334 次 |
| 最近记录: |