【问题标题】:Where should I check if username already exist in rest api?我应该在哪里检查用户名是否已经存在于rest api中?
【发布时间】:2020-12-01 11:47:12
【问题描述】:

我正在使用 Spring Boot 创建一个休息应用程序。我有三个逻辑层:控制器、服务和存储库。我应该在哪里检查给定的用户名和类似的值是否已经存在于数据库中?

在控制器层,我检查用户输入(长度、大小等)。我也可以在这里检查用户名存在吗?例如:

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));
}

或者我应该依靠实体上的休眠注释来处理这些异常?

@NotNull
@Column(name = "username", unique = true)
private String username;

非常感谢您的所有反馈。

【问题讨论】:

    标签: java spring rest validation


    【解决方案1】:

    我应该在哪里检查给定的用户名和类似的值是否已经存在于数据库中?

    可能与您的其他业务逻辑所在的逻辑层相同。服务层?

    在控制器层,我检查用户输入(长度、大小等)我可以在这里检查用户名存在吗?

    当然可以。这可能不是一个好主意。解析输入以确保它们符合您理解的模式是边界问题。使用您理解的输入是一个领域问题。

    我可以通过调用注册表方法(existByUsername)并抛出自定义错误,然后在控制器中捕获它在服务层中进行检查吗?

    您可以 - 您可能会在代码审查期间遇到一些关于 异常 是否是处理该问题的正确实现机制的意见。有替代方法,以及它们之间的权衡,以及上下文(在层内抛出异常与在层之间抛出异常)。

    【讨论】:

    • 好的,我明白了。谢谢你的意见:)
    猜你喜欢
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 2023-01-28
    • 1970-01-01
    • 2014-09-24
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多