某某项目用户信息修改功能实现及测试
写在前面的话:初入贵圈,菜鸟一枚,分享一些想法,共勉,求轻虐。
需求:通过restclient插件模拟修改用户信息功能,具体行为:先登录获取用户账户token,通过token找到对应用户信息,并修改用户nickname。PS:部分功能已经封装好,这里正在附录展示直接相关部分;
app:eclipse(项目框架已搭建好),navicat(查看mySQL数据),restclient插件(用于模拟登录)
Step1: 写代码,如下
文件:Bumofang/.../MemberController.java
package com.fh.controller.bmf.app; import ...略 下同 @Controller("AppMemberController") @RequestMapping(value = "/app/user") public class MemberController extends AppBaseController { @RequestMapping(value = { "/update" }, method = {RequestMethod.POST }, produces = {JSON_UTF8}) @ResponseBody
/*login*/ public Object login(@RequestBody Map<String, String> map) throws Exception { String mobile = map.get("mobile"); if(StringUtils.isBlank(mobile)){ return ResponseMessageEnum.ARGUMENT_EXCEPTION.toString(); } PageData pd = new PageData(); pd.put("MOBILE", mobile); pd = memberService.findByMobile(pd); if(pd == null || pd.isEmpty()){ return ResponseMessageEnum.ERROR_LOGIN.toString(); } String userId = pd.getString("ID"); String token = AccessTokenManager.getInstance().putToken(userId); Map<String,Object> tokenMap = new HashMap<String,Object>(); tokenMap.put("token", token); return ResponseMessageEnum.SUCCESS.appendMapToString(tokenMap); }
/*update 修改用户昵称*/
public Object update(@RequestBody Map<String, String> map) throws Exception{ //Map<>map方法映射用户输入的信息
Object result = getUser();
if(result instanceof ResponseMessageEnum){
return result.toString();
} //通过token获取mySQL里的用户信息,getUser()方法见附录1
PageData pd = (PageData)result; //将用户数据赋值给pd
String nickname = map.get("nickname"); //获取restclient插件中update的数据,即{"nickname":"afterTest"}
pd.put("NICKNAME", nickname); //将{"nickname":"afterTest"}数据传给pd
try {
memberService.edit(pd); //将pd数据反馈给mySQL数据表
}
catch (Exception e) {
return ResponseMessageEnum.SERVER_SQL_ERROR.toString();
}
return ResponseMessageEnum.SUCCESS.appendMapToString(new HashMap<String, Object>());
//在restclient插件返回{“data":{},"code":200,"msg":"success"},appendMapToString()方法见附录4
}
}
Step2:测试:用restclient插件登录,body参数{"mobile":"15068880000"},返回token值为e59dfcbf7f40662aee9a27f4f0ee8303,如图1,此时对应的mySQL数据如图2
Step3:测试:用restclient插件模拟update,url:http://localhost:8080/bumofang/app/user/update?token=e59dfcbf7f40662aee9a27f4f0ee8303;body参数{"nickname":"afterTest"},如图3;修改成功后的对应的mySQL数据如图4
附录1
文件:Bumofang/.../ AppBaseController.java
package com.fh.controller.base; import ... public class AppBaseController extends BaseController{ @Autowired protected HttpServletRequest request; @Resource(name = "memberService") protected MemberService memberService; protected Object getUser(){ String token = request.getParameter("token"); if(StringUtils.isBlank(token)){ return ResponseMessageEnum.ARGUMENT_TOKEN_EMPTY; } AccessToken accessToken = AccessTokenManager.getInstance().getToken(token); if(accessToken == null){ return ResponseMessageEnum.ARGUMENT_TOKEN_INVALID; } String userId = accessToken.getUserId(); PageData pd = new PageData(); pd.put("ID", userId); try { PageData rs = memberService.findById(pd); if(rs == null || rs.isEmpty()){ return ResponseMessageEnum.ERROR_USER_NOT_EXIT; } return rs; } catch (Exception e) { return ResponseMessageEnum.SERVER_SQL_ERROR; } } }
附录2:
文件:Bumofang/.../MemberService.java
package com.fh.service.bmf.member; @Service("memberService") public class MemberService { public void edit(PageData pd)throws Exception{ dao.update("MemberMapper.edit", pd); // MemberMapper.edit见附录3 } }
附录3::
文件:Bumofang/.../MemberMapper.xml
<mapper namespace="MemberMapper"> <!-- 修改 --> <update id="edit" parameterType="pd"> update MEMBER set NUMBER = #{NUMBER}, USERNAME = #{USERNAME}, PASSWORD = #{PASSWORD}, NICKNAME = #{NICKNAME}, AVATAR = #{AVATAR}, MOBILE = #{MOBILE}, PROFESSION = #{PROFESSION}, DEFAULT_AREA = #{DEFAULT_AREA}, DEFAULT_ADDRESS = #{DEFAULT_ADDRESS}, REALNAME = #{REALNAME}, ID_CARD = #{ID_CARD}, BANK_CARD = #{BANK_CARD}, STATUS = #{STATUS}, WECHAT_ID = #{WECHAT_ID}, QQ_ID = #{QQ_ID}, WEIBO_ID = #{WEIBO_ID}, ID = ID where ID = #{ID} </update> </mapper>
附录4:
文件:Bumofang/.../ResponseMessageEnum.java
package com.fh.common.model; import ... public enum ResponseMessageEnum { public String appendMapToString(Map<String, Object> appendMap) { Map rsMap = new HashMap(); rsMap.put("data", appendMap); rsMap.put("code", code); rsMap.put("msg", this.message); JSONObject jsonNode = JSONObject.fromObject(rsMap); //将rsMap对象转化为JSON对象,并赋值给jsonNode return jsonNode.toString(); } }