java我应该在哪里检查rest api中是否已经存在用户名?
我正在使用Spring Boot创建一个rest应用程序。我有三个逻辑层:控制器、服务和存储库。我应该在哪里检查数据库中是否已经存在给定的用户名和类似值
在控制器层,我检查用户输入(长度、大小等)。我可以在这里检查用户名的存在吗?例如:
if(this.userService.existUserByUsername(request.getUsername()))
throw new ResponseStatusException(
HttpStatus.CONFLICT, "User with given username already exists");
我可以通过调用注册表方法(existByUsername)并抛出一个自定义错误,然后在控制器中捕获来在服务层检查它吗
public void addUser(SignUpRequestDto signUpRequestDto){
if(this.userRepository.existsByUsername(signUpRequestDto.getUsername()))
throw new UserAlreadyExistException("User with given uusernamealready exist");
else
this.userRepository.save(this.convertSignUpRequestDtoToEntity(signUpRequestDto));
}
或者我应该依赖实体上的hibernate注释来处理这些异常
@NotNull
@Column(name = "username", unique = true)
private String username;
非常感谢您的反馈
# 1 楼答案
可能与其他业务逻辑所在的逻辑层相同。服务层
当然可以。这可能不是个好主意;解析输入以确保它们符合您理解的模式是一个边界问题。使用您理解的输入是一个领域问题
你可以——在代码审查期间,你可能会对异常是否是处理该异常的正确实现机制感到不满。还有其他方法,以及它们之间的权衡和上下文(在层内抛出异常与在层之间抛出异常)