这是我的SignUpRequestDTo类:
package ez.ndvz.application.api.v1.dto.authenticationDTOs;
@Data
@Builder
public class SignUpRequestDTO {
@NonNull
@NotBlank
String name;
@NotBlank
@NonNull
String lastName;
@NonNull
@NotBlank
@Pattern(regexp = "^\\+(389)\\s?([2-7]0|78|77|75|76|71|72|73|74)\\s?([0-9]{6})$", message = "Invalid phone number format for North Macedonia")
String phoneNumber;
@NotBlank
@NonNull
@Email
String email;
@NonNull
@NotBlank
@Size(min = 6)
String password;
}
这是我的User类
package ez.ndvz.core.domain.models;
@AllArgsConstructor
@Builder
@Getter
@Setter
public class User {
private Long id;
private String name;
private String lastName;
private String phoneNumber;
private String email;
private String password;
private Set<Roles> roles;
private List<Property> propertyList;
}
我正在使用MapStruct将我的dto映射到我的域类,下面是我的映射器界面:
package ez.ndvz.application.api.v1.mapper;
@Mapper(componentModel = "spring")
public interface UserHttpMapper {
User toDomain(SignUpRequestDTO signUpRequestDTO);
User toDomain(SignInRequestDTO signInRequestDTO);
UserEntity toEntity(SignInRequestDTO signInRequestDTO);
UserEntity toEntity(SignUpRequestDTO signUpRequestDTO);
}
但这并不能正常工作,因为当我访问构建生成的文件时,它没有将属性从我的DTO类映射到我的用户类:
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2024-02-14T11:32:45+0100",
comments = "version: 1.5.5.Final, compiler: IncrementalProcessingEnvironment from gradle-language-java-8.2.jar, environment: Java 19.0.2 (Amazon.com Inc.)"
)
@Component
public class UserHttpMapperImpl implements UserHttpMapper {
@Override
public User toDomain(SignUpRequestDTO signUpRequestDTO) {
if ( signUpRequestDTO == null ) {
return null;
}
User.UserBuilder user = User.builder();
return user.build();
}
@Override
public User toDomain(SignInRequestDTO signInRequestDTO) {
if ( signInRequestDTO == null ) {
return null;
}
User.UserBuilder user = User.builder();
return user.build();
}
@Override
public UserEntity toEntity(SignInRequestDTO signInRequestDTO) {
if ( signInRequestDTO == null ) {
return null;
}
UserEntity.UserEntityBuilder userEntity = UserEntity.builder();
return userEntity.build();
}
@Override
public UserEntity toEntity(SignUpRequestDTO signUpRequestDTO) {
if ( signUpRequestDTO == null ) {
return null;
}
UserEntity.UserEntityBuilder userEntity = UserEntity.builder();
return userEntity.build();
}
}
如您所见,没有映射任何属性. 即使我加上以下内容:
@Mapper(componentModel = "spring")
public interface UserHttpMapper {
@Mapping(target = "name",source = "name")
@Mapping(target = "lastName",source = "lastName")
@Mapping(target = "phoneNumber",source = "phoneNumber")
@Mapping(target = "email",source = "email")
@Mapping(target = "password",source = "password")
User toDomain(SignUpRequestDTO signUpRequestDTO);
我得到了这个错误:
error: No property named "name" exists in source parameter(s). Type "SignUpRequestDTO" has no properties.
User toDomain(SignUpRequestDTO signUpRequestDTO)
我认为问题可能与我的DTO类有关? 这些是Gradle dependencies:
dependencies {
implementation project(':domain')
implementation project(':infrastructure:persistance')
implementation project(':infrastructure:authentication')
implementation 'org.mapstruct:mapstruct:1.5.5.Final'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final'
implementation 'jakarta.validation:jakarta.validation-api:3.0.2'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.projectlombok:lombok:1.18.28'
annotationProcessor 'org.projectlombok:lombok:1.18.28'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}