这是我的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'
}

推荐答案

您需要添加lombok-mapstruct-binding个处理器:

dependencies {
    ...
    annotationProcessor 'org.projectlombok:lombok-mapstruct-binding:0.2.0'
}

Java相关问答推荐

日食IDE 2024-03在Ubuntu下崩溃,导致hr_err_pid.log

Listview—在Android Java中正确链接项目时出错

Select 按位运算序列

在for—each循环中的AnimationTimer中的if语句'

在模拟超类中设置非setter属性的值

使用意向过滤器从另一个应用程序启动服务

如何在Java中从XML中获取特定的 node ,然后将其删除?

Spring和可编辑";where";@Query

未找到适用于响应类型[类java.io.InputStream]和内容类型[Text/CSV]的HttpMessageConverter

如何在代码中将行呈现在矩形前面?

在Java中将int[]矩阵添加到ArrayList中,但出现错误

在Oracle JDBC连接中,连接失效和身份验证失效是什么意思?

如何以编程方式保存workBench.xmi?

具有多个模式的DateTimeForMatter的LocalDate.parse失败

在应用getCellFormula()时,Excel引用中的文件名始终为";[1]";使用Apache POI()

Win32函数的JNA绑定DwmGetColorizationColor返回E_INVALIDARG错误

持续时间--为什么在秒为负数的情况下还要做额外的工作?

为什么使用lo索引来解决二进制搜索问题不同于使用hi索引?

[jdk21][Foreign Function&;Memory API]MemoryLayout::varHandle通过可变数组进行 struct 化的问题

如何使用我的RLE程序解决此问题