@MAPSTRUCT.소스 매개 변수에 "패키지"라는 속성이 없습니다.
나는 글을 쓰고 있습니다.MVC
REST
신청.Spring Boot
그리고.Hibernate
는 하로했다니습기다를 로 결정했습니다.DTO
:매핑을 사용한 MAPSTRUCT
가이드에 따라 다 한 것 같은데 오류가 발생합니다.뭐가 문제죠, 이해할 수가 없어요.포럼과 구글에는 정보가 거의 없습니다.
에 저는 가 추신: 처에저문에 했습니다.Lombok
그래서 제거했습니다.Lombok
수동으로 할당된 동으로됨당getters / setters
그러면 문제가 해결되지 않았습니다.저는 둘 다 가져갔어요.Drink
학급과 학교에서.DrinkDTO
는 처습니를 했습니다.getters / setters
여전히 도움이 되지 않았습니다.
음료:
@Entity
@Table(name = "drink", schema = "public")
public class Drink {
public Drink() { // Constructor for Hibernate
}
// Fields
//
private @Id
@GeneratedValue
Long id;
@Column(name = "name")
private String name;
@Column(name = "price")
private float price;
@Column(name = "about")
private String about;
@Column(name = "is_deleted")
private boolean isDeleted;
// Relationships
//
@ManyToOne
@JoinColumn(name = "packaging_id")
private Packaging packaging;
@ManyToOne
@JoinColumn(name = "manufacturer_id")
private Manufacturer manufacturer;
@ManyToOne
@JoinColumn(name = "country_id")
private Countries countries;
}
음료 DTO:
public class DrinkDTO {
// Fields
//
private String drinkName;
private float drinkPrice;
private String drinkAbout;
private Packaging drinkPackaging;
private Manufacturer drinkManufacturer;
private Countries drinkCountries;
// Getters and Setters
//
public String getDrinkName() {
return drinkName;
}
public void setDrinkName(String drinkName) {
this.drinkName = drinkName;
}
public float getDrinkPrice() {
return drinkPrice;
}
public void setDrinkPrice(float drinkPrice) {
this.drinkPrice = drinkPrice;
}
public String getDrinkAbout() {
return drinkAbout;
}
public void setDrinkAbout(String drinkAbout) {
this.drinkAbout = drinkAbout;
}
public Packaging getDrinkPackaging() {
return drinkPackaging;
}
public void setDrinkPackaging(Packaging drinkPackaging) {
this.drinkPackaging = drinkPackaging;
}
public Manufacturer getDrinkManufacturer() {
return drinkManufacturer;
}
public void setDrinkManufacturer(Manufacturer drinkManufacturer) {
this.drinkManufacturer = drinkManufacturer;
}
public Countries getDrinkCountries() {
return drinkCountries;
}
public void setDrinkCountries(Countries drinkCountries) {
this.drinkCountries = drinkCountries;
}
// toSTRING
@Override
public String toString() {
return "DrinkDTO{" +
"drinkName='" + drinkName + '\'' +
", drinkPrice=" + drinkPrice +
", drinkAbout='" + drinkAbout + '\'' +
", drinkPackaging=" + drinkPackaging +
", drinkManufacturer=" + drinkManufacturer +
", drinkCountries=" + drinkCountries +
'}';
}
고객 컨트롤러:
@GetMapping("/drinks")
List<DrinkDTO> getAllDrinks(){
return DrinkMapper.INSTANCE.drinksToDrinksDTO(customerService.getAllDrinks());
}
빌드.그라들
// Mapstruct
implementation 'org.mapstruct:mapstruct:1.3.1.Final'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.3.1.Final'
음료 지도:
@Mapper
public interface DrinkMapper {
DrinkMapper INSTANCE = Mappers.getMapper(DrinkMapper.class);
@Mapping(source = "name", target = "drinkName")
@Mapping(source = "price", target = "drinkPrice")
@Mapping(source = "about", target = "drinkAbout")
@Mapping(source = "packaging", target = "drinkPackaging")
@Mapping(source = "manufacturer", target = "drinkManufacturer")
@Mapping(source = "countries", target = "drinkCountries")
DrinkDTO drinkToDrinkDTO(Drink drink);
@Mapping(source = "drinkName", target = "name")
@Mapping(source = "drinkPrice", target = "price")
@Mapping(source = "drinkAbout", target = "about")
@Mapping(source = "drinkPackaging", target = "packaging")
@Mapping(source = "manufacturer", target = "drinkManufacturer")
@Mapping(source = "countries", target = "drinkCountries")
Drink drinkDTOtoDrink(DrinkDTO drinkDTO);
@Mapping(source = "name", target = "drinkName")
@Mapping(source = "price", target = "drinkPrice")
@Mapping(source = "about", target = "drinkAbout")
@Mapping(source = "packaging", target = "drinkPackaging")
@Mapping(source = "manufacturer", target = "drinkManufacturer")
@Mapping(source = "countries", target = "drinkCountries")
List<DrinkDTO> drinksToDrinksDTO(List<Drink> drinks);
}
오류:
사용 시 동일한 문제가 발생하는 사용자의 경우mapstruct
+lombok
:
저도 같은 문제가 있었습니다.그 이유는 제가 계속 사용했기 때문입니다.Lombok
플러그인도 있습니다.제거할 필요는 없지만 다음 단계에서 확인해야 합니다.pom.xml
<annotationProcessorPaths>
Lombok 태그는 Mapstruct보다 앞에 있습니다.
예(pom.xml 파일의 일부):
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId> <!-- IMPORTANT - LOMBOK BEFORE MAPSTRUCT -->
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
오류는 속성을 매핑하려고 했다는 사실에서 발생합니다.List<>
존재하지 않는 물건들입니다.Mapstruct는 목록 내 요소를 매핑하는 방법을 알고 있는 경우 목록 간의 매핑을 생성할 수 있을 정도로 똑똑합니다.
따서지정필없다습니가요할라를 지정할 필요가 없습니다@Mapping
목록 대 목록 매핑의 주석.는 맵구는사니다용합다음을을 합니다.drinkToDrinkDTO
매핑 방법을 자동으로 지정합니다.
@Mapping(...)
DrinkDTO drinkToDrinkDTO(Drink drink);
List<DrinkDTO> drinksToDrinksDTO(List<Drink> drinks);
@Jakub Swowikowski 답변에 추가하자면, 그라들 의존성에서도 동일한 일이 발생합니다.다음 주문으로 인해 오류가 발생했습니다.
dependencies {
...
annotationProcessor("org.mapstruct:mapstruct-processor:${mapstructVersion}")
annotationProcessor("org.projectlombok:lombok:${lombokVersion}")
...
}
그래서 어쩔 수 없이 순서를 바꿨습니다.
dependencies {
...
annotationProcessor("org.projectlombok:lombok:${lombokVersion}")
annotationProcessor("org.mapstruct:mapstruct-processor:${mapstructVersion}")
...
}
저의 경우, 오류는 주석 처리기의 선언 순서가 아니라 누락된 롬복 주석에서 비롯되었습니다.
에 대한 매핑이 있었습니다.Customer
CustomerDto
러나그나Customer
게터와 세터가 누락되었습니다.
CustomerDto toCustomerDto(Customer customer);
와 함께
@Data
public class CustomerDto {
...
}
그리고.
public class Customer {
...
}
추가하기@Data
에▁Customer
수업은 나를 위해 그 문제를 해결해주었습니다.
PackakingMapper, CountriesMapper가 있는 경우 다음과 같이 @Mapper 주석에 uses 매개변수를 추가합니다.
@Mapper(uses = {PackagingMapper.class, CountriesMapper.class, ManufacturerMapper.class})
public interface DrinkMapper{
....
}
당신의 pom.xml 파일에 롬복 의존성을 첫 번째 의존성으로 넣으십시오.
그런 다음 메이븐 프로젝트를 다시 로드
mapstruct 플러그인을 추가할 필요가 없습니다. 저는 종속성을 사용했을 뿐입니다.
<dependencies>
**<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>**
<!-- https://mvnrepository.com/artifact/org.mapstruct/mapstruct-processor -->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.5.5.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mapstruct/mapstruct -->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.5.5.Final</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
절 믿으세요. Lombok을 Spring Boot Maven 플러그인 구성에서 제외하더라도 프로젝트에서 계속 사용할 수 있습니다.플러그인의 제외 구성은 Maven에게 지정된 아티팩트를 플러그인의 클래스 경로에서 제외하도록 지시하기만 하면 됩니다.이 경우 Lombok 아티팩트는 Spring Boot Maven 플러그인의 클래스 경로에서 제외되지만 프로젝트의 클래스 경로에서는 제외되지 않습니다.
사용 시 동일한 문제가 발생하는 사용자의 경우mapstruct + lombok
지도 구조가 둘 다 작동하기 전에 롬복을 추가합니다.lombok
&Mapstruct
에 기초로 함annotation-processor
그리고 맵 구조는 맵퍼 구현을 생성하기 위해 롬복에서 생성된 getter & setter에 의존합니다.순서를 변경할 때 lombok getter & setter가 먼저 생성되고 그 다음에 지도 구조에 의해 사용됩니다. 그래서 왜 순서를 변경하는지에 대한 이유는annotationProcessor
작품!!
저도 이것에 부딪혔는데, 범인은 사용한 것입니다.
@액세서리(유연=참)
내 엔터티 수업에서.실험적인 롬복 기능을 사용하는 데 적합합니다! :)
단계:
생성
Getters / Setters
위해서Drink
그리고.DrinkDTO
수업(아마도 없을 것입니다)Lombok
).다음을 사용하여 프로젝트 구축
Gradle
작업:Build
프로젝트 시작!
언급URL : https://stackoverflow.com/questions/63034956/mapstruct-no-property-named-packaging-exists-in-source-parameters
'programing' 카테고리의 다른 글
iAsyncCursor는 mongodbc# 드라이버와의 반복에 어떻게 사용됩니까? (0) | 2023.06.29 |
---|---|
둥근 모서리로 레이아웃을 만드는 방법...? (0) | 2023.06.29 |
pip 패키지에 대한 종속성 트리를 보여줄 수 있는 방법이 있습니까? (0) | 2023.06.29 |
모바일 장치에서 로컬 호스트 웹 사이트 보기 (0) | 2023.06.29 |
함수에서 셀 값 설정 (0) | 2023.06.29 |