0

こんにちはMapStructを使用して次の問題があります。次のインターフェイスがあります。

public interface IRole {
    String getName();        
    void setName(String name);
}

public interface IUser {
    public String getUsername();
    public void setUsername(String username);
    public IRole getRole();
    public void setRole(IRole role);
    public String getPassword();
    public void setPassword(String password);
}

私は両方の2つの実装を持っています:

UserUserDtoRole、およびRoleDto

UserMapper という名前のマッパーを作成しました。

@Mapper
public interface UserMapper {

    UserDto userToUserDto(User user);

    RoleDto roleToRoleDto(Role user);

}

問題は、User を UserDto に変換しようとすると、ロール オブジェクトが変換されず、次のメイン メソッドを実行していることです。

public static void main(String[] args) {
    UserMapper instance = Mappers.getMapper( UserMapper.class );
    Role r=new Role();
    r.setName("Admin");
    User user=new User();
    user.setUsername("Alex");
    user.setPassword("Raidentrance123");
    user.setRole(r);
    UserDto dto=instance.userToUserDto(user);
    System.out.println(dto.getUsername());      
    System.out.println(dto.getRole().getClass());       
}

結果は次のとおりです。

アレックス クラス com.raidentrance.model.Role

そして私は期待した

アレックス クラス com.raidentrance.model.RoleDto

これが私の質問の詳細ですソースとターゲットは同じインターフェース MapStruct を共有します

これが私のコードです。ジャクソンに@JsonDeserialize(as=Impl.class)のようなものがあるかどうか、または JPA にtargetEntityのようなものがあるかどうかはわかりません

注: github リポジトリのブランチ作品に解決策があります。getRole のデータ型を から に変更しましたが、IRole getRole()動作RoleDto getRole()しますが、前述のようなものを探しています。

4

1 に答える 1

1

インターフェイスのマッピング メソッドを定義する必要があります。

RoleDto roleToRoleDto(IRole role);

そのため、メソッドが IRole インターフェイスを返す場合、mapstruct はマッピングを実行できるようになりました。

于 2015-07-28T09:39:31.013 に答える