gpt4 book ai didi

java - 是否可以从 dto 和 User 类创建一个 newUser ?

转载 作者:行者123 更新时间:2023-12-03 05:04:24 25 4
gpt4 key购买 nike

我正在尝试创建一个注册表单,它使用我的 DTO 和我的用户类中的字段。我不太确定要去做,可以使用一些帮助。

我有一个 User 类,如下所示:

@Entity
public class User extends AbstractEntity {

@NotNull
private String username;

@NotNull
private String pwHash;

@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "email")
private String email;
@Column(name = "phone_number")
private String phoneNumber;



public User() {}

public User(String username, String password) {
this.username = username;
this.pwHash = encoder.encode(password);
}

public String getUsername() {
return username;
}

private static final BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();

public boolean isMatchingPassword(String password) {
return encoder.matches(password, pwHash);
}

// ---> Removed Getters and setters removed for brevity.

注册表最初设置为要求提供用户名/密码对,然后要求用户再次输入以确认密码。因此关联的 DTO 扩展了 LoginFormDTO 并添加了一个额外的字段用于密码验证。当我只要求输入用户名和密码时,我就能够完成注册并更新我数据库中的这些列。但是现在我想在注册期间添加其他用户信息。

我的数据传输对象已更新为如下所示......(我已经尝试过使用和不使用 @Column 注释。

public class RegisterFormDTO extends LoginFormDTO{

private String verifyPassword;

@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "email")
private String email;
@Column(name = "phone_number")
private String phoneNumber;



public String getVerifyPassword() {
return verifyPassword;
}

public void setVerifyPassword(String verifyPassword) {
this.verifyPassword = verifyPassword;
}

public String getFirstName() {
return firstName;
}
// additional pojo getters and setters

我的 LoginFormDTO 看起来像这样......

public class LoginFormDTO {

@NotNull
@NotBlank
@Size(min = 3, max = 20, message = "Invalid username. Must be between 3 and 30 characters.")
private String username;

@NotNull
@NotBlank
@Size(min = 5, max = 20, message = "Invalid password. Must be between 5 and 30 characters.")
private String password;



public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

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


}

我的 AuthenticationController 的注册方法是这样的

    @PostMapping("/register")
public String processRegistrationForm(@ModelAttribute @Valid RegisterFormDTO registerFormDTO,
Errors errors, HttpServletRequest request,
Model model) {

if (errors.hasErrors()) {
model.addAttribute("title", "Register");
return "register";
}

User existingUser = userRepository.findByUsername(registerFormDTO.getUsername());

if (existingUser != null) {
errors.rejectValue("username", "username.alreadyexists", "A user with that username already exists");
model.addAttribute("title", "Register");
return "register";
}

String password = registerFormDTO.getPassword();
String verifyPassword = registerFormDTO.getVerifyPassword();
if (!password.equals(verifyPassword)) {
errors.rejectValue("password", "passwords.mismatch", "Passwords do not match");
model.addAttribute("title", "Register");
return "register";
}

User newUser = new User(registerFormDTO.getUsername(), registerFormDTO.getPassword(), registerFormDTO.getFirstName(), registerFormDTO.getLastName(), registerFormDTO.getPhoneNumber(), registerFormDTO.getEmail());
userRepository.save(newUser);
setUserInSession(request.getSession(), newUser);

return "redirect:";
}

我不确定如何从 dto 和用户类创建新用户。我可以设置用户名和密码,但似乎无法添加用户信息,例如 firstName , lastName , phoneNumberemail .数据库添加了 id , pw_hashusername .添加这些字段以便它们显示在数据库中的最佳方法是什么?先感谢您。我从这个有用的社区中学到了很多东西!

最佳答案

扩展怎么样RegisterFormDTO带字段的类:firstName , lastName , phoneNumber , email ?

那么,您的 User类应该有另一个支持多于 username 的构造函数和 password .在这种情况下,要限制构造函数中的参数数量,您可以使用构建器设计模式。

您可以在这里阅读更多信息:Managing constructors with many parameters in Java

还有一点关于命名约定,如果你的名字包含超过两个字符的大写快捷方式,你应该继续使用 PascalCase:RegisterDTO -> RegisterDto .

见:Java Naming Convention with Acronyms

关于java - 是否可以从 dto 和 User 类创建一个 newUser ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61945149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com