实现注册接口;
注册接口的接口文档:在【SpringBoot电商项目1用户模块用户模块介绍;】也说明了注册接口的几个要求,比如:用户名不能为空、密码不能为空、密码不能小于8位,用户名不能重复等;
前置的一点说明;启动项目;使用postman去测试接口;在以前【附加:一般情况下,通过浏览器的地址栏输入url,发送的只能是get请求;】我们就说过,发起post请求的两种方式:【设置表单method='post'】和【使用postman模拟】;;;而,通过浏览器直接发起的只能是get请求;
在UserServiceImpl实现类中,去实现register()注册方法;/***注册方法*@paramuserName*@parampassword*/@Overridepublicvoidregister(StringuserName,StringpassworthrowsImoocMallException{//查询用户名是否存在;注册时,不允许重名;Userresult=userMapper.selectByName(userNam;if(result!=nul{//如果result不为null,这说明已经有这个用户了;此时,就可以直接向上抛异常;thrownewImoocMallException(ImoocMallExceptionEnuNAME_EXISTE;}//如果上面没有抛异常,那么说明用户名没有重名,那么我们就可以把这个注册信息写到数据库中Useruser=newUser();user.setUsername(userNam;user.setPassword(passwor;intcount=userMapper.insertSelective(user);if(count==0){thrownewImoocMallException(ImoocMallExceptionEnuINSERT_FAILE;}}说明:其中的【userMapper.selectByName(userNam】根据userName查询用户的方法,是我们自己定义的;参见下一部分:【在UserMapper接口中,定义根据userName查询用户的方法,并在UserMapper.xml中编写对应的SQL;】一个特别重要的点:在Service这儿,如果判定【UserName重名】了,那么我们应该给出错误提示;如果这是在Controller层,那么我们可以直接像前面那样,直接返回一个【ApiRestResponserror(ImoocMallExceptionEnu***)】这之类的错误信息:我们这是在Service层,由于每一层的分工是明确的;Service层只负责业务逻辑的处理,Service层不应该去触碰那些【和最终返回,相关的内容】,因为这是Controller的职责;这儿我们采用【向上抛出异常】的策略,来解决这个问题;这就涉及到了自定义异常,在【SpringBoot电商项目1用户模块注册接口开发之:自定义异常类;】中对这个问题进行了详细介绍;如果判定这儿用户重复了,那么我们就向上抛出对应的异常:如果判定这儿用户没有重复,那么我们就可以调用Dao层的【userMapper.insertSelective(user)】方法,来把注册信息写到数据库中;【userMapper.insertSelective(user)】说明:自然【userMapper.insertSelective(user)】是我们在【SpringBoot电商项目数据库设计与项目初始化创建SpringBoot项目;使用【mybatis-generator】插件生成实体类、mapper接口、mapper.xml等逆向文件;】中,通过【mybatis-generator】插件生成的;【insertSelective()】方法内容分析:核心就是,insertSelective()允许插入一个【部分属性有值的,User对象】;另一个比较类似的【insert()】方法,则要求:【全部属性都有值的,User对象】;通过上面的分析,就会明白,为什么注册的时候,我们使用【insertSelective()】方法,而没有使用【insert()】方法了;然后,如果Dao层操作数据库失败了,对于这个错误,也需要向上抛出异常;
在UserService接口中,定义注册的方法:register()方法;
在UserController中,创建注册方法:register()方法;/***注册方法*@paramuserName*@parampassword*@return*@throwsImoocMallException*/@PostMapping('/register')@ResponseBodypublicApiRestResponseregister(@RequestParam('userName')StringuserName,@RequestParam('password')StringpassworthrowsImoocMallException{if(StringUtils.isEmpty(userNa{//如果用户名为空,直接返回用户名不能为空的信息;returnApiRestResponserror(ImoocMallExceptionEnuNEED_USER_NAM;}if(StringUtils.isEmpty(passwor){//如果密码为空,直接返回密码不能为空的信息;returnApiRestResponserror(ImoocMallExceptionEnuNEED_PASSWOR;}if(passworlength()<{//如果密码长度小于8位,直接返回密码长度不能小于8位的信息;returnApiRestResponserror(ImoocMallExceptionEnuPASSWORD_TOO_SHORT);}userServicregister(userName,passwor;returnApiRestResponssuccess();}说明:【@RequestParam】注解,有助于我们更好的识别和获取请求中的参数;如有需要,可以参考【SpringMVC入门与数据绑定SpringMVC数据绑定Controller接收请求中的参数之:使用【方法参数】接收;】通过这篇博客可以看到,【@RequestParam】注解能够帮助获取get请求中的参数;【SpringMVC入门与数据绑定SpringMVC数据绑定接收表单中的【复合数据】;】通过这篇博客可以看到,【@RequestParam】不仅也可以帮助获取post请求中的参数,还能够设置默认值;设置请求方式和url;添加上@ResponseBody注解;判断【用户名不能为空】、【密码不能为空】、【密码不能小于8位】;PS:自己以前做过的几个项目,这类【用户名不能为空】、【密码不能为空】、【密码不能小于8位】工作是放在前端来做的;这儿我们把这个工作放在了后端来做;这儿判空时,我们没有使用【userName==null】的方式;而是使用的Springframework提供的一个工具【StringUtils.isEmpty(userNam】来判空;如果上面的【用户名不能为空】、【密码不能为空】、【密码不能小于8位】这三个检查都通过了,那么就可以正式开始调用Service层的方法,去注册了;service层的逻辑,可以参考下面的【在UserService接口中,定义注册的方法:register()方法;】和【在UserServiceImpl实现类中,去实现register()注册方法;】自然,因为Service层的register()方法存在抛出异常的情况;Controller层在调用Service层的这个方法时候,Controller层也需要处理这个异常;这儿我们是把这个异常,继续向上抛;】中做了介绍)自然,如果程序一切正常,service层也没有抛异常,即【userServicregister(userName,passwor;】也没有异常,那么就代表注册成功了;此时Controller层,直接返回给前端一个代表成功的ApiRestResponse就行了;
零:【注册】接口,预先说明;
文章为作者独立观点,不代表观点