// 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"?
我该如何解决这个问题?
只需将
annotationProcessor "org.projectlombok:lombok-mapstruct-binding:${lombokMapstructBindingVersion}"
添加到 build.gradle 即可。
可能与龙目岛有关。
看一下:
对于想要解决更简单问题的人来说,只需在 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);
}