MapStruct 映射器错误:结果类型 Dto 中存在未知属性“propertyName”。您指的是“null”吗?

问题描述 投票:0回答:3
// Driver model
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Driver {
    private String driverName;
    private String licenseNumber;
}

// Car model
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Car {
    private String make;
    private List<Driver> drivers;
    private CarType type;
}

// Car DTO
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CarDto {
    private String make;
    private Integer totalDrivers;
    private String type;
}

@Mapper
public interface CarMapper {
    @Mapping(target = "totalDrivers", expression = "java(mapDrivers(car.getDrivers()))")
    CarDto mapCarDto(Car car);

    default Integer mapDrivers(List<Driver> totalDrivers) {
        return totalDrivers.size();
    }

    @InheritInverseConfiguration
    @Mapping(target = "drivers", ignore = true)
    Car mapDtoToCar(CarDto carDto);
}

当我运行这个项目时,会报告这些错误:

..\CarMapper.java
java: Unknown property "totalDrivers" in result type CarDto. Did you mean "null"?
java: Unknown property "drivers" in result type Car. Did you mean "null"?

我该如何解决这个问题?

java spring spring-boot mapstruct
3个回答
3
投票

只需将

annotationProcessor "org.projectlombok:lombok-mapstruct-binding:${lombokMapstructBindingVersion}"
添加到 build.gradle 即可。


2
投票

0
投票

对于想要解决更简单问题的人来说,只需在 DTO 中添加一些 getter 和 setter 即可。

就我而言,这很有帮助。

你应该注意大写字母,我发现它有点违反直觉,但是无论如何,映射必须有一些约定

我的DTO

public class SalesOrderDTO {

    private Integer SOID;
    private LocalDate SOOrderDate;

    private String CustomerName;
    private String CustomerID;

    private LocalDate SODueDate;

    private Boolean SOIsClosed;

    private LocalDateTime SOLastModified;


    public Integer getSOID() {
        return SOID;
    }

    public void setSOID(Integer SOID) {
        this.SOID = SOID;
    }

    public LocalDate getSOOrderDate() {
        return SOOrderDate;
    }

    public void setSOOrderDate(LocalDate SOOrderDate) {
        this.SOOrderDate = SOOrderDate;
    }

    public LocalDate getSODueDate() {
        return SODueDate;
    }

    public void setSODueDate(LocalDate SODueDate) {
        this.SODueDate = SODueDate;
    }

    public Boolean getSOIsClosed() {
        return SOIsClosed;
    }

    public void setSOIsClosed(Boolean SOIsClosed) {
        this.SOIsClosed = SOIsClosed;
    }

    public LocalDateTime getSOLastModified() {
        return SOLastModified;
    }

    public void setSOLastModified(LocalDateTime SOLastModified) {
        this.SOLastModified = SOLastModified;
    }

    public String getCustomerName() {
        return CustomerName;
    }

    public void setCustomerName(String customerName) {
        CustomerName = customerName;
    }

    public String getCustomerID() {
        return CustomerID;
    }

    public void setCustomerID(String customerID) {
        CustomerID = customerID;
    }
}

我的地图绘制者

@Mapper(
        componentModel = "spring",
        unmappedTargetPolicy = ReportingPolicy.ERROR
)
public interface SalesOrderMapper {
    @Mapping(source = "customer.fullName", target = "customerName")
    @Mapping(source = "customer.NCCustomerID", target = "customerID")
    SalesOrderDTO toDto(SalesOrder salesOrder);
}
© www.soinside.com 2019 - 2024. All rights reserved.