2015-07-09 9 views
0

Привет У меня есть следующие проблемы, используя MapStruct, у меня есть следующие интерфейсы:Исходный и целевой доли тот же интерфейс 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); 
} 

У меня есть две реализации как:

пользователя, UserDto, Роль и РольDto.

Я создал Mapper по имени UserMapper:

@Mapper 
public interface UserMapper { 

    UserDto userToUserDto(User user); 

    RoleDto roleToRoleDto(Role 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());  
} 

И результат:

Alex класс com.raidentrance.model.Role

и я ожидал

Alex класс com.raidentrance.model.RoleDto

Вот мой вопрос подробный Source and target share the same interface MapStruct

Here is my code Я не уверен, если есть что-то вроде в Джексоне @JsonDeserialize (as = Impl.class) или в JPA targetEntity

Примечание: У меня есть решение в ветке, работающее в репозитории github. Там я изменил тип данных для getRole от IRole getRole() до RoleDto getRole(), и он работает, но я ищу что-то вроде упомянутого.

ответ

1

Вы должны определить способ отображения для интерфейса:

RoleDto roleToRoleDto(IRole role);

Так mapstruct теперь может сделать отображение, если метод возвращает IRole-интерфейс.