java - mapstruct - 列表<字符串> 到列表<对象>

标签 java spring dto mapstruct

我的 DTO 中有一个字符串列表,我想将其映射到对象列表中,在映射器中我使用该服务通过该字符串获取对象,但出现以下错误

Can't map property "java.util.List<java.lang.String> customers" to "java.util.List<com.softilys.soyouz.domain.Customer> customers".

Consider to declare/implement a mapping method: "java.util.List<com.softilys.soyouz.domain.Customer> map(java.util.List<java.lang.String> value)".

public class FirstDomain implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    private String  id;

    private String description;

    private List<Customer> customers;
}

public class FirstDomainDTO {

    private String id;

    private String description;

    private List<String> customers;
}

@Mapper(uses = { CustomerService.class })
public interface FirstDomainMapper extends EntityMapper<FirstDomainDTO, FirstDomain> {

    @Mapping(source = "customers", target = "customers")
    FirstDomainDTO toDto(FirstDomain firstDomain);

    @Mapping(source = "customers", target = "customers")
    FirstDomain toEntity(FirstDomainDTO firstDomainDTO);

    default String fromCustomer(Customer customer) {
        return customer == null ? null : customer.getCode();
    }

}

最佳答案

您收到的错误消息应该足以帮助您了解问题所在。在这种情况下,MapStruct 不知道如何从 List<String> 进行映射。进入List<Customer> 。反过来也可以,因为您已经定义了

default String fromCustomer(Customer customer) {
    return customer == null ? null : customer.getCode();
}

要解决此问题,您还需要定义相反的内容。

@Mapper(uses = { CustomerService.class })
public interface FirstDomainMapper extends EntityMapper<FirstDomainDTO, FirstDomain> {

    @Mapping(source = "customers", target = "customers")
    FirstDomainDTO toDto(FirstDomain firstDomain);

    @Mapping(source = "customers", target = "customers")
    FirstDomain toEntity(FirstDomainDTO firstDomainDTO);

    default String fromCustomer(Customer customer) {
        return customer == null ? null : customer.getCode();
    }

    default Customer fromStringToCustomer(String customerId) {
        // Implement your custom mapping logic here
    }
}

关于java - mapstruct - 列表<字符串> 到列表<对象>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59215370/

相关文章:

java - 如何在 POST 请求中传递 headers 和请求正文?

java - Spring Security - 简单的 CORS 身份验证错误

java - 如何使用 Spring MVC 在 DTO 上绑定(bind)日历

c# - WebAPI DTO 响应请求消息传递模式

java - 如何在 play framework 1.2.x 中获取当前 ssl 客户端 X509 证书

java - org.hibernate.criterion.Order 无法解析字符串的 '.' 属性

java - 从命令行通过 SSL 使用 Spring HttpInvoker

java - 使用 Java POI API 将 PDF 文件插入 MSWord

java - 使用 userId 创建对象列表

c# - DTO/POCO 是否应该在所有属性上都有构造函数和私有(private) setter ?