Java:未映射的目标属性

问题描述 投票:0回答:2

我有Mapper的问题。我正在使用mapstruct-processor来构建Maven项目。我一直收到警告:警告:(15,16)java:未映射的目标属性:“from,to”。警告:(13,13)java:未映射的目标属性:“clientFrom,clientTo”。我该怎么办呢?类客户端运行良好并创建客户端。

 @Entity
public class Message {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

private String message;

@ManyToOne(cascade = {CascadeType.ALL})
@JoinColumn(name = "client_from")
private Client clientFrom;

@ManyToOne
@JoinColumn(name = "client_to")
private Client clientTo;

public Message(){}

public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public String getMessage() {
    return message;
}

public void setMessage(String message) {
    this.message = message;
}

public Client getClientFrom() {
    return clientFrom;
}

public void setClientFrom(Client clientFrom) {
    this.clientFrom = clientFrom;
}

public Client getClientTo() {
    return clientTo;
}

public void setClientTo(Client clientTo) {
    this.clientTo = clientTo;
}


}


public class MessageDTO {

private Long id;
private String message;
private ClientDTO from;
private ClientDTO to;

public MessageDTO(){}

public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public String getMessage() {
    return message;
}

public void setMessage(String message) {
    this.message = message;
}

public ClientDTO getFrom() {
    return from;
}

public void setFrom(ClientDTO from) {
    this.from = from;
}

public ClientDTO getTo() {
    return to;
}

public void setTo(ClientDTO to) {
    this.to = to;
}
}



 @Mapper(componentModel = "spring", uses = {ClientMapper.class})
public interface MessageMapper {

Message toMessage(MessageDTO messageDTO);

MessageDTO toMessageDTO(Message message);

List<Message> toMessageList(List<MessageDTO> list);
List<MessageDTO> toMessageDTOList(List<Message> list);
}
java maven mapper mapstruct
2个回答
2
投票

错误Unmapped target properties: "<list of properties>"通常用适当的方法表示,在你的情况下,它意味着MapStruct无法找到fromto用于映射MessageDTO toMessageDTO(Message message)clientFrom以及clientTo用于映射Message toMessage(MessageDTO messageDTO)

要解决此问题,您必须明确定义不同属性之间的映射。

你的映射器看起来像(我假设使用mapstruct-jdk8):

@Mapper(componentModel = "spring", uses = {ClientMapper.class})
public interface MessageMapper {

    @Mapping(target = "clientFrom", source = "from")
    @Mapping(target = "clientTo", source = "to")
    Message toMessage(MessageDTO messageDTO);

    @InheritInverseConfiguration //MapStruct will automatically reverse the defined mappings from toMessage
    MessageDTO toMessageDTO(Message message);

    List<Message> toMessageList(List<MessageDTO> list);
    List<MessageDTO> toMessageDTOList(List<Message> list);
}

为了更好地理解,请查看here。在文档中。有关@InheritInverseConfiguration的更多信息,请查看here

如果MessageMessageDTO中属性(getters / setters)的名称相同,那么你就不需要@Mapping注释了


3
投票

在最新版本的MapStruct中,您可以:

  1. 为任何不应映射的字段OR定义带有ignore = true属性的@Mapping注释
  2. 向映射器界面添加特殊报告策略,以立即禁止所有未映射字段上的警告,如下所示:
    @Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)
© www.soinside.com 2019 - 2024. All rights reserved.