首页 > 解决方案 > 如何确保帐户是唯一的

问题描述

我正在用spring-boot和mysql和mybatis开发一个账户系统。

我在表字段上使用了唯一索引,当有新请求到来时,我使用 try catch 来处理它。

我认为这不好。

@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("query/{id}")
    public String query(@PathVariable int id){
        return userService.query(id).toString();
    }
    @RequestMapping("insert")
    public String addUser(){
        User user = new User();
        user.setAccount("aaa");
        user.setPassword("password");
        try {
            userService.insert(user);
        }catch (Exception e){
            if (e.getLocalizedMessage().contains("Duplicate entry")){
//                Duplicate entry index
                user.setId(-1);
            }else{
//                other Exception
                user.setId(-2);
            }
        }
        return user.toString();
    }
}
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `account` varchar(255) NOT NULL DEFAULT '',
  `password` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  UNIQUE KEY `iacc` (`account`)
) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8

标签: mysqlspringspring-boot

解决方案


考虑到您正在使用 Spring-Boot,myBatis 您可以在注册用户之前对存储库进行额外调用以检查用户是否存在

@Select("select * from user where account= #{accountVar}")
User findById(@Param("accountVar") String accountName);

如果您的用户存在具有相同的帐户名,您应该抛出自定义异常和/或提及用户已存在或类似内容的响应消息

请记住遵守 Spring Boot 或更确切地说基于 HTTP 的标准来响应端点

  • 如果成功,您应该返回 200 OK 以及消息或任何最适合您的情况
  • 如果发生故障/异常,您应该返回 400 Bad Request 以及消息

推荐阅读