首先我们还是看关于单点登录接口文档中关于用户注册接口的说明,如下图所示。请求方式是POST类型,URL为我们明确指定好了,参数有四个,需要校验完合法性之后再提交。
以上接口文档写的还算明了,大家就凑合着看吧!
由于用户注册只涉及到单表操作,因此我们使用逆向工程生成的dao层代码即可。
下面我们来编写Service层的代码。首先在taotao-sso-interface工程的UserRegisterService接口中添加一个用户注册的方法,如下图所示。
紧接着在taotao-sso-service工程的UserRegisterServiceImpl实现类中实现该用户注册方法。
为方便大家复制,现将UserRegisterServiceImpl实现类的代码贴出。
/**
* 用户注册处理Service
* <p>Title: UserRegisterServiceImpl</p>
* <p>Description: </p>
* <p>Company: www.itcast.cn</p>
* @version 1.0
*/
@Service
public class UserRegisterServiceImpl implements UserRegisterService {
@Autowired
private TbUserMapper userMapper;
@Override
public TaotaoResult checkUserInfo(String param, int type) {
TbUserExample example = new TbUserExample();
Criteria criteria = example.createCriteria();
// 判断要校验的数据类型,来设置不同的查询条件
// 1、2、3分别代表username、phone、email
if (type == 1) {
criteria.andUsernameEqualTo(param);
} else if (type == 2) {
criteria.andPhoneEqualTo(param);
} else if (type == 3) {
criteria.andEmailEqualTo(param);
}
// 执行查询
List<TbUser> list = userMapper.selectByExample(example);
if (list == null || list.size() == 0) {
return TaotaoResult.ok(true);
}
return TaotaoResult.ok(false);
}
@Override
public TaotaoResult createUser(TbUser user) {
// 校验数据的合法性
if (StringUtils.isBlank(user.getUsername())
|| StringUtils.isBlank(user.getPassword())) {
return TaotaoResult.build(400, "用户名和密码不能为空");
}
// 校验用户名是否重复
TaotaoResult taotaoResult = checkUserInfo(user.getUsername(), 1);
boolean flag = (boolean) taotaoResult.getData();
if (!flag) {
return TaotaoResult.build(400, "用户名重复");
}
// 校验手机号是否重复
if (user.getPhone() != null) { // 注意:空串也算有值
taotaoResult = checkUserInfo(user.getPhone(), 2);
if (!(boolean) taotaoResult.getData()) {
return TaotaoResult.build(400, "手机号重复");
}
}
// 校验邮箱是否重复
if (user.getEmail() != null) { // 注意:空串也算有值
taotaoResult = checkUserInfo(user.getEmail(), 3);
if (!(boolean) taotaoResult.getData()) {
return TaotaoResult.build(400, "邮箱重复");
}
}
// 补全TbUser对象的属性
user.setCreated(new Date());
user.setUpdated(new Date());
// 把密码进行MD5加密
String md5Pass = DigestUtils.md5DigestAsHex(user.getPassword().getBytes());
user.setPassword(md5Pass);
// 插入到数据库
userMapper.insert(user);
// 返回结果
return TaotaoResult.ok();
}
}
至此Service层的代码便编写完毕!
下面我们接着来编写Controller层的代码。 在taotao-sso-web工程的UserController类中添加如下图所示标注的代码。
注意:GET请求不需要在RequestMapping注解中指定,但是POST就需要指定了。
Controller层代码编写好了之后,现在我们来测试下这个用户注册接口是否好使。由于我们修改过taotao-sso-interface和taotao-sso-service,因此我们需要重新把taotao-sso打包到本地Maven仓库。
下面我们启动taotao-sso工程以及taotao-sso-web工程,启动成功之后,我们使用一个测试工具来测试POST请求(浏览器地址栏是不能模拟POST请求的),POST请求是要带参数的,参数的名称必须与下图tb_user表中框住的四个字段一样。
这个测试工具是什么呢?其实我也是第一次使用,就是下图所示的这个jar包。
按道理来讲,双击它是可以运行的,但是如果你的电脑安装的是解压版的JDK,那么双击它是不能运行的,这时怎么办呢?方法总是有的,你可以创建一个批处理文件,例如start.bat,其内容为:
start java -jar restclient-ui-3.5-jar-with-dependencies.jar
创建完毕,双击该bat文件,即可看到如下图所示界面。
我们在URL一栏中输入http://localhost:8088/user/register
,类型选择POST,如下图所示。
我们点击”Body”一栏,点击下拉框会出现下拉菜单让我们选择,我们选择”String body”。
选择”String body”后如下图所示,默认的content-type是”text/plain”,我们要把它改成表单类型。
我们按照如下图所示更改content-type类型。
下面我们添加参数,如下图所示,添加四个参数。
添加完之后,点击”Generate”,如下图所示。
下面发送请求,如下图所示,可以看到返回的提示是用户名重复了。
其实我们输入的四个参数的值都是在数据库表中存在的,除了密码,其它三个都会报不能重复的错误,要想不报错,我们要把用户名、电话、邮箱三个参数都修改下,改成数据库中不存在的数据,如下图所示。可以看到返回的状态码是200,说明成功了。
我们可以到数据库表中查看一下,发现数据库表中已经有新注册用户的信息了。