SpringBoot+MyBatis+MySQL电脑商城项目实战(四)用户注册—控制层 ...

打印 上一主题 下一主题

主题 526|帖子 526|积分 1578

5 注册-控制层

5.1 创建响应

状态码、状态码描述信息、数据。这部分功能封装到一个类中,将这类作为方法返回值,返回给前端浏览器。
  1. package com.cy.store.util;
  2. import java.io.Serializable;
  3. /**
  4. * Json格式的数据进行响应
  5. */
  6. public class JsonResult<E> implements Serializable {
  7.     //状态码
  8.     private Integer state;
  9.     //描述信息
  10.     private String message;
  11.     //数据类型不确定,声明称泛型
  12.     private E data;
  13.     public JsonResult() {
  14.     }
  15.     public JsonResult(Integer state) {
  16.         this.state = state;
  17.     }
  18.     public JsonResult(Throwable e) {
  19.         this.message = e.getMessage();
  20.     }
  21.     public JsonResult(Integer state, E data) {
  22.         this.state = state;
  23.         this.data = data;
  24.     }
  25.     public Integer getState() {
  26.         return state;
  27.     }
  28.     public void setState(Integer state) {
  29.         this.state = state;
  30.     }
  31.     public String getMessage() {
  32.         return message;
  33.     }
  34.     public void setMessage(String message) {
  35.         this.message = message;
  36.     }
  37.     public E getData() {
  38.         return data;
  39.     }
  40.     public void setData(E data) {
  41.         this.data = data;
  42.     }
  43. }
复制代码
5.2 设计请求

依据当前的业务功能模块进行请求的设计。
请求路径:/users/reg
请求参数:User user
请求类型:敏感类型用POST,没有用GET
响应结果:JsonResult
5.3 处理请求


  • 创建一个控制层对应的类UserController类。依赖于业务层的接口。
  1. package com.cy.store.controller;
  2. import com.cy.store.entity.User;
  3. import com.cy.store.service.IUserService;
  4. import com.cy.store.service.ex.InsertException;
  5. import com.cy.store.service.ex.UsernameDuplicatedException;
  6. import com.cy.store.util.JsonResult;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.stereotype.Controller;
  9. import org.springframework.web.bind.annotation.RequestMapping;
  10. import org.springframework.web.bind.annotation.ResponseBody;
  11. import org.springframework.web.bind.annotation.RestController;
  12. // @Controller
  13. @RestController //controller+ResponseBody
  14. @RequestMapping("users")
  15. public class UserController {
  16.     @Autowired
  17.     private IUserService userService;
  18.     @RequestMapping("reg")
  19.     // @ResponseBody //表示此方法的响应结果以json格式进行数据的相应给到前端,为了防止在所有方法上添加,在类上使用注解 @RestController
  20.     public JsonResult<Void> reg(User user){
  21.         // 创建响应结果对象
  22.         JsonResult<Void> result = new JsonResult<>();
  23.         try {
  24.             userService.reg(user);
  25.             result.setState(200);
  26.             result.setMessage("注册成功");
  27.         } catch (UsernameDuplicatedException e) {
  28.             result.setState(400);
  29.             result.setMessage("用户名被占用");
  30.         }catch (InsertException e){
  31.             result.setState(500);
  32.             result.setMessage("注册时产生未知的异常");
  33.         }
  34.         return result;
  35.     }
  36. }
复制代码

  • 启动服务,在浏览器输入访问地址,可以看到成功输出信息

    再次访问该地址,报用户名占用异常

    去数据库查看生成的用户名信息

5.4 控制层优化设计

在控制层抽离一个父类,在这个父类中统一的去处理关于异常的相关操作,编写一个BaseController类,统一处理异常。
  1. package com.cy.store.controller;
  2. import com.cy.store.service.ex.InsertException;
  3. import com.cy.store.service.ex.ServiceException;
  4. import com.cy.store.service.ex.UsernameDuplicatedException;
  5. import com.cy.store.util.JsonResult;
  6. import org.springframework.web.bind.annotation.ExceptionHandler;
  7. /**
  8. * 控制层类的基类
  9. */
  10. public class BaseController {
  11.     /**
  12.      * 操作成功的状态
  13.      */
  14.     public static  final int OK = 200;
  15.     //请求处理方法,这个方法的返回值就是需要传递给前端的数据
  16.     //自动将异常对象传递给此方法的参数列表上
  17.     //当前项目中产生了异常,会被统一拦截到此方法中,这个方法此时就充当的是请求处理方法,方法的返回值直接给到前端。
  18.     @ExceptionHandler(ServiceException.class)  //用于统一处理抛出的异常
  19.     public JsonResult<Void> handleException(Throwable e){
  20.             JsonResult<Void> result = new JsonResult<>(e);
  21.             if (e instanceof UsernameDuplicatedException){
  22.                 result.setState(4000);
  23.                 result.setMessage("用户名已经被占用");
  24.             } else if (e instanceof InsertException) {
  25.                 result.setState(5000);
  26.                 result.setMessage("注册时产生未知的异常");
  27.             }
  28.             return result;
  29.     }
  30. }
复制代码
重新构建了reg()方法
  1. // @Controller
  2. @RestController //controller+ResponseBody
  3. @RequestMapping("users")
  4. public class UserController extends BaseController {
  5.     @Autowired
  6.     private IUserService userService;
  7.     @RequestMapping("reg")
  8.     // @ResponseBody //表示此方法的响应结果以json格式进行数据的相应给到前端,为了防止在所有方法上添加,在类上使用注解 @RestController
  9.     public JsonResult<Void> reg(User user){
  10.         userService.reg(user);
  11.         return  new JsonResult<>(OK);
  12.     }
  13. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

忿忿的泥巴坨

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表