无法解析java对象上的方法

无法解析java对象上的方法,java,spring,mongodb,dto,mapper,Java,Spring,Mongodb,Dto,Mapper,我正在用java尝试一些新的设计模式,但我对为什么我的模式不起作用感到困惑 我的目标是将一个用户帐户传递到一个数据传输对象中,然后通过检查新用户是否存在,以及是否使用getter和setter创建用户并使用映射器将其保存到mongoDB数据库,从而使用该对象注册一个新用户 在我的服务实现和映射程序中对setpassword进行未解析的方法调用之前,一切似乎都进展顺利,我不知道为什么。 我通过扩展我的useraccount中的一个基本用户来获取我的setFirstname,该用户上有一个first

我正在用java尝试一些新的设计模式,但我对为什么我的模式不起作用感到困惑

我的目标是将一个用户帐户传递到一个数据传输对象中,然后通过检查新用户是否存在,以及是否使用getter和setter创建用户并使用映射器将其保存到mongoDB数据库,从而使用该对象注册一个新用户

在我的服务实现和映射程序中对setpassword进行未解析的方法调用之前,一切似乎都进展顺利,我不知道为什么。 我通过扩展我的useraccount中的一个基本用户来获取我的setFirstname,该用户上有一个firstname字段

任何帮助都会很好:)


您的setter是无效的方法,也就是说,它们不返回任何内容

通过制作如下设置器,您将获得预期的结果:

public UserAccountDto setEmail(字符串电子邮件){
this.email=电子邮件;
归还这个;
}

您必须在setters中添加
并返回此

我知道毕达哥斯已经回答了您的问题,但让我给您一个提示。
尝试使用。Lombok是一个java库,它可以帮助您避免样板代码。例如,使用
@Data
注释,您告诉Lombok在引擎盖下创建所有的getter和setter。这将对您有很大帮助。

因此,在我的数据中有一种类型的userAccountDto,并为每个setter返回此值,在我的userAccount中有一种类型的userAccount,并为每个setter返回此值?是的,您需要这样做。我建议您将这些setter放在
User
类中,以便一次性地定义它们。您的所有设置程序都应返回此
package com.datingapp.model.user;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "userAccounts")
public class UserAccount extends User {
    @Id
    private String id;
    private String email;
    private String password;
    private String lastname;
    private String phoneNumber;

    public UserAccount() {}

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getLastname() {
        return lastname;
    }

    public void setLastname(String lastname) {
        this.lastname = lastname;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }
}
package com.datingapp.dto.model.user;

import com.datingapp.model.user.User;
import com.datingapp.model.user.UserAccount;

public class UserAccountDto extends User {
    private String email;
    private String lastname;
    private String password;
    private String phoneNumber;

    public UserAccountDto() {
    }

    public String getLastname() {
        return lastname;
    }

    public void setLastname(String lastname) {
        this.lastname = lastname;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

}
package com.datingapp.dto.mapper;

import com.datingapp.dto.model.user.UserAccountDto;
import com.datingapp.model.user.UserAccount;
import org.springframework.stereotype.Component;

@Component
public class UserAccountMapper {

    public static UserAccountDto toUserAccountDto(UserAccount userAccount) {
        return new UserAccountDto()
                .setEmail(userAccount.getEmail())
                .setFirstname(userAccount.getFirstname())
                .setLastname(userAccount.getLastname())
                .setPassword(userAccount.getPassword())
                .setPhoneNumber(userAccount.getPhoneNumber());
    }
}
package com.datingapp.service.user;

import com.datingapp.dto.mapper.UserAccountMapper;
import com.datingapp.dto.model.user.UserAccountDto;
import com.datingapp.model.user.UserAccount;
import com.datingapp.repository.user.UserAccountRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Component;

@Component
public class UserAccountImpl implements UserAccountService {
    private UserAccountRepository userAccountRepository;
    private BCryptPasswordEncoder bCryptPasswordEncoder;

    @Autowired
    public UserAccountImpl(UserAccountRepository userAccountRepository, BCryptPasswordEncoder bCryptPasswordEncoder) {
        this.userAccountRepository = userAccountRepository;
        this.bCryptPasswordEncoder = bCryptPasswordEncoder;
    }

    @Override
    public UserAccountDto signup(UserAccountDto userDto) {
        UserAccount user = userAccountRepository.findByEmail(userDto.getEmail());
        if (user == null) {
            user = new UserAccount()
                    .setEmail(userDto.getEmail())
                    .setPassword(bCryptPasswordEncoder.encode(userDto.getPassword()))
                    .setFirstName(userDto.getFirstname())
                    .setLastName(userDto.getFirstname())
                    .setMobileNumber(userDto.getPhoneNumber());
            return UserAccountMapper.toUserAccountDto(userAccountRepository.save(user));
        }
    }
}
package com.datingapp.service.user;

import com.datingapp.dto.model.user.UserAccountDto;
import com.datingapp.model.user.UserAccount;

public interface UserAccountService {
    UserAccountDto signup(UserAccountDto userAccountDto);
}