如何确保帐户唯一

时间:2019-08-05 09:36:20

标签: mysql spring spring-boot

我正在使用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

1 个答案:

答案 0 :(得分:1)

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

'data.frame':   3 obs. of  3 variables:
 $ QS201EW...group: Factor w/ 34760 levels "","Area",..: 32848 2 3
 $ X                     : Factor w/ 1849 levels "","1001","1002",
 $ X.1                   : Factor w/ 2462 levels "","100"

如果您的用户具有相同的accountName,则应引发Customize Exception和/或响应消息中提到用户已存在或类似的内容

记住要遵循Spring Boot或基于HTTP的标准来响应端点

  • 如果成功,您应该返回200 OK以及消息或 哪种最适合您的情况
  • 如果发生故障/异常,您 应该返回400错误请求以及消息