亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將 MapStruct 用于不同的數據類型?

如何將 MapStruct 用于不同的數據類型?

浮云間 2023-05-10 14:03:44
我有兩種類型的數據要映射:注冊用戶Dto:public class SignUpUserDto {    private String firstName;    private String lastName;    private String username;    private String email;    private String password;    private String title;}注冊用戶:@Entitypublic 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 title 成員是一個String。對于實體title 成員是Title。映射器應該是什么樣子的?我應該傳遞已經在服務中轉換的標題嗎?@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中進行轉換?@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);}
查看完整描述

2 回答

?
神不在的星期二

TA貢獻1963條經驗 獲得超6個贊

我應該傳遞已經在服務中轉換的標題嗎?


你絕對不應該這樣做。這是轉換器的工作,而不是服務的


嘗試以下方法:


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) Mapper 接口增加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);

    }

}


查看完整回答
反對 回復 2023-05-10
?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

像這樣使用第二個選項:


 @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(Title.valueOf(signUpUserDto.getTitle().toUpperCase()))")

public SignUpUser signUpUserDtoToSignUpUser(SignUpUserDto signUpUserDto);            

}


查看完整回答
反對 回復 2023-05-10
  • 2 回答
  • 0 關注
  • 213 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號