java - 无法解析 java 对象上的方法
问题描述
我正在用java尝试一些新的设计模式,但我对为什么我的不能工作感到困惑。
我的目标是将用户帐户传递给数据传输对象,然后可以通过检查它们是否存在以及如果不使用 getter 和 setter 来创建用户并将其保存到 mongoDB 数据库来注册新用户用映射器。
一切似乎都很顺利,直到我在服务实现和映射器中对 setpassword 进行了未解决的方法调用,但我不知道为什么。我通过在我的用户帐户中扩展一个基本用户来获取我的 setFirstname,该用户帐户上有一个名字字段。
任何帮助都会很棒:)
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);
}
解决方案
你的设置器是无效的方法,也就是说他们什么都不返回。
通过制作像这样的设置器,您将获得预期的结果:
public UserAccountDto setEmail(String email) {
this.email = email;
return this ;
}
您必须添加return this
您的设置器。
推荐阅读
- c++ - 将指针数组传递给 3D 数组:访问冲突异常 (C++)
- c - CreateProcessA %appdata%
- javascript - 检测 Chrome 移动 Android 浏览器上的选项卡关闭
- c++ - 无法绑定可变参数函数并保存到 std::function
- python - 在 Jupyterhub 中使用虚拟环境管理开发/部署包
- javascript - 如何使此功能按预期工作?
- three.js - 如何在不使用 JSONLoader 的情况下从 JSON 对象创建 three.js 几何
- r - 按 R 中的值的总和进行十进制
- c# - 在调用异步代码时始终考虑 AggregateExceptions 中的多个异常是否有意义?
- elasticsearch - 融合弹性搜索接收器正则表达式分配给所有主题并发送到索引