【问题标题】:JHipster EntityMapper interface (mapstruct): map a Spring projection interfaceJHipster EntityMapper 接口(mapstruct):映射一个Spring投影接口
【发布时间】:2017-12-11 14:15:28
【问题描述】:

我已经使用 JHipster v4.6.0 生成器生成了一个新项目,我正在使用它的 EntityMapper 接口在域和 DTO 对象之间进行映射。

public interface EntityMapper <D, E> {
    public E toEntity(D dto);
    public D toDto(E entity);
    public List <E> toEntity(List<D> dtoList);
    public List <D> toDto(List<E> entityList);
}

我需要使用 Spring 投影来拥有更小的域和 DTO 对象,(我不想要实体的所有字段),所以我创建了一个只有我需要的字段的 getter 的接口,并且我在存储库中创建了一个方法来检索此接口类型(遵循 Spring 参考指南)

public interface ClienteIdENome {
    Long getId();
    String getNome();
}

@Repository
public interface ClienteRepository extends JpaRepository<Cliente,Long> {
    ClienteIdENome findById(Long id);  
}

查询 findById 检索只有 id 和 nome 字段的 ClienteIdENome 对象。

现在,我想将此对象映射到以下 DTO:

public class ClienteIdENomeDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    private Long id;
    @NotNull
    @Size(max = 50)
    private String nome;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
}

所以,我创建了映射器接口:

@Mapper(componentModel = "spring", uses = {})
public interface ClienteIdENomeMapper extends EntityMapper<ClienteIdENomeDTO, ClienteIdENome> {

}

但是 Eclipse 向我报告了 EntityMapper 接口中方法“public E toEntity(D dto)”的错误,并显示以下消息:

没有为返回类型 it.andrea.ztest01.repository.ClienteIdENome 注册实现类型。

有什么帮助吗? 非常感谢

【问题讨论】:

  • 在这种情况下为什么需要 DTO?您的 DTO 看起来像您的接口的实现。

标签: jhipster projection mapstruct


【解决方案1】:

您的ClienteIdENome 并不是真正的实体。我认为您不需要使用EntityMapper,但您需要定义一个单向映射器。从ClienteIdENomeClienteIdENomeDTO

您的映射器需要如下所示:

public interface ClienteIdENomeMapper {
    ClienteIdENomeDTO toDto(ClienteIdENome entity);
    List <ClienteIdENomeDTO> toDto(List<ClienteIdENome> entityList);
}

我不知道 JHipster,所以我不能说使用不同于 EntityMapper 的映射器意味着什么。

【讨论】:

  • 谢谢,已解决。使用不同的映射器不是问题。 JHipster 使用该接口 EntityMapper 允许以快速的方式为域/DTO 创建映射器,而无需每次都定义 toEntity/toDto 方法:@Mapper(componentModel = "spring", uses = {}) public interface DiscussionMapper extends EntityMapper {}
猜你喜欢
  • 2021-10-09
  • 1970-01-01
  • 2014-04-06
  • 2022-08-19
  • 1970-01-01
  • 2020-01-10
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
相关资源
最近更新 更多