检查重复的用户名,防止更新用户



我有以下用于添加用户的Java控制器:

@GetMapping("/registration")
public String registration(Model model) {
if (securityService.isAuthenticated()) {
return "redirect:/";
}
model.addAttribute("userForm", new User());
return "registration";
}

我也有以下验证器来防止重复的用户名:

if (userService.findByEmail(user.getEmail()) != null) {
errors.rejectValue("username", "Duplicate.userForm.username");
}

我现在试图添加一个控制器来更新一个现有的用户。我创建了下面的代码来使用与创建用户时相同的注册表单:

@GetMapping("/users/showFormForUpdate")
public String showFormForUpdate(@RequestParam("userId") long theId, Model theModel) {

User theUser = userService.findById(theId);

theModel.addAttribute("userForm", theUser);

return "registration";
}

我的问题是,当我尝试更新我的重复用户警报出现,如果我不更改用户名。

这是我在注册表单中给出警告的代码:
<div class="form-group">
<input type="text" th:field="*{username}" class="form-control" placeholder="Username"
autofocus="true">
<span style="color:red" class="has-error" th:if="${#fields.hasErrors('username')}" th:errors="*{username}"></span>
</div>
总之,当我创建一个用户时,我希望任何重复的用户名被标记,但如果我更新用户,我不希望这样。如何在更新用户的同时保持防止重复用户的能力?我用org.springframework.ui.Model中的addAttribute。我知道一种选择是使用不同的表单进行更新,但我希望应该有一种方法可以同时使用一个表单。
if (userService.findByEmail(user.getEmail()) != null) {
errors.rejectValue("username", "Duplicate.userForm.username"); }

避免上面的代码级验证,如果用户名是重复的,让数据库报错。即在注册期间,因为User对象没有userId, JPA有insert,如果存在重复,您将得到DataIntegrityViolationException的通知。在更新期间,由于存在userId, JPA会执行update,而不会导致DataIntegrityViolationException

相关内容

  • 没有找到相关文章

最新更新