如何使用MapStruct不同的数据类型?

罗伯特:

我有两种类型的数据,我要地图:

SignUpUserDto:

public class SignUpUserDto {
    private String firstName;
    private String lastName;
    private String username;
    private String email;
    private String password;
    private String title;
}

SignUpUser:

@Entity
public class SignUpUser {
    private Long id;
    private String firstName;
    private String lastName;
    private String username;
    private String email;
    private String password;
    private Title title;
}

标题:

public enum Title {
    JUNIOR("junior"),
    MIDDLE("middle"),
    SENIOR("senior"),
    MANAGER("manager");

    private final String title;

    Title(final String title) {
        this.title = title;
    }

    public String toString() {
        return this.title;
    }
}
  • 对于DTO冠军成员是一个字符串

  • 对于实体标题构件为标题

映射器看起来应该怎么样?

我应该通过转换已经在标题服务

@Mapper(componentModel = "spring")
public interface SignUpUserMapper {
    SignUpUserMapper INSTANCE = Mappers.getMapper(SignUpUserMapper.class);
    @Mapping(target = "title", expression = "title")
    public SignUpUserDto signUpUserToSignUpUserDto(SignUpUser signUpUser, String title);
    @Mapping(target = "title", source = "title")
    public SignUpUser signUpUserDtoToSignUpUser(SignUpUserDto signUpUserDto, Title title);
}

或者我应该做的转换映射

@Mapper(componentModel = "spring",  imports = Title.class)
public interface SignUpUserMapper {
    SignUpUserMapper INSTANCE = Mappers.getMapper(SignUpUserMapper.class);
    @Mapping(target = "title", expression = "java(signUpUser.getTitle().toString())")
    public SignUpUserDto signUpUserToSignUpUserDto(SignUpUser signUpUser);
    @Mapping(target = "title", source = "java(new Title(signUpUserDto.getTitle()))")
    public SignUpUser signUpUserDtoToSignUpUser(SignUpUserDto signUpUserDto);
}
尼古拉·舍甫琴科:

我应该通过转换已经在服务的标题?

你肯定建议立即进行删除不能这样做。这是转换器的工作,而不是服务的

请尝试以下方法:

1)添加转换方法枚举类

enum Title {
    ...

    public static Title fromString(String title) {
        if (title != null) {
            for (Title t : Title.values()) {
                if (t.toString().equals(title)) {
                    return t;
                }
            }
        }
        return null;
    }
}

2)加入2层转换的方法来映射接口(仅适用于Java的8+)

@Mapper(componentModel = "spring")
public interface SignUpUserMapper {
    SignUpUserDto signUpUserToSignUpUserDto(SignUpUser signUpUser);
    SignUpUser signUpUserDtoToSignUpUser(SignUpUserDto signUpUserDto);

    default String fromEnum(Title title) {
        return title == null ? null : title.toString();
    }

    default Title toEnum(String title) {
        return title == null ? null : Title.fromString(title);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用推土机将数据类型映射到不同的数据类型?

如何声明不同数据类型的数组

如何编写多种不同的数据类型

对不同的数据类型使用COALESCE?

如何使用熊猫从给定列中具有不同数据类型的数据集中过滤数据?

如何使用取决于不同数据类型的数学运算的数据更新新的空列?

如何使用模板从 ASCII 数组中提取不同数据类型的数据

如何使用Sparklyr包来平整不同数据类型的数据?

如何在飞行中将BLOB数据类型与不同的数据库一起使用?

如何使用数据类型包含功能

如何检查正在使用的数据类型?

如何处理针对相同输入数据类型返回不同数据类型的api?

如何使用一项功能在不同的列上执行多个pandas数据类型更改?

如何使用3种具有不同数据类型的日期组件获取日期

如何使用vb.net创建具有不同数据类型的列表?

如何使用Gson处理具有相同属性名称的不同数据类型?

如何在Python中使用不同的数据类型打印嵌套列表的元素?

连接不同的数据类型

genfromtxt不同的数据类型

对不同数据类型的操作

SSMS:如何查找名称相似但数据类型不同的列

如何快速从 Firestore 读取不同的数据类型

如何解码不同数据类型的数组?

如何排序在Java不同数据类型的ArrayList

如何打印两个不同的数据类型数组?

python中不同数据类型的排序是如何发生的

如何通过Websockets路由不同的数据类型?

如何创建具有不同数据类型的 JSON?

如何从Java的ResultSetMetaData获取不同的数据类型?