淘淘商城——單點登入之使用者註冊
首先我們還是看關於單點登入介面文件中關於使用者註冊介面的說明,如下圖所示。請求方式是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,說明成功了。
我們可以到資料庫表中檢視一下,發現數據庫表中已經有新註冊使用者的資訊了。