最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

【世界热闻】SpringBoot+MyBatis+MySQL电脑商城项目实战(四)用户注册—控制层

来源:博客园


(资料图片)

5 注册-控制层

5.1 创建响应

状态码、状态码描述信息、数据。这部分功能封装到一个类中,将这类作为方法返回值,返回给前端浏览器。

package com.cy.store.util;import java.io.Serializable;/** * Json格式的数据进行响应 */public class JsonResult implements Serializable {    //状态码    private Integer state;    //描述信息    private String message;    //数据类型不确定,声明称泛型    private E data;    public JsonResult() {    }    public JsonResult(Integer state) {        this.state = state;    }    public JsonResult(Throwable e) {        this.message = e.getMessage();    }    public JsonResult(Integer state, E data) {        this.state = state;        this.data = data;    }    public Integer getState() {        return state;    }    public void setState(Integer state) {        this.state = state;    }    public String getMessage() {        return message;    }    public void setMessage(String message) {        this.message = message;    }    public E getData() {        return data;    }    public void setData(E data) {        this.data = data;    }}

5.2 设计请求

依据当前的业务功能模块进行请求的设计。

请求路径:/users/reg请求参数:User user请求类型:敏感类型用POST,没有用GET响应结果:JsonResult

5.3 处理请求

  1. 创建一个控制层对应的类UserController类。依赖于业务层的接口。
package com.cy.store.controller;import com.cy.store.entity.User;import com.cy.store.service.IUserService;import com.cy.store.service.ex.InsertException;import com.cy.store.service.ex.UsernameDuplicatedException;import com.cy.store.util.JsonResult;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.bind.annotation.RestController;// @Controller@RestController //controller+ResponseBody@RequestMapping("users")public class UserController {    @Autowired    private IUserService userService;    @RequestMapping("reg")    // @ResponseBody //表示此方法的响应结果以json格式进行数据的相应给到前端,为了防止在所有方法上添加,在类上使用注解 @RestController    public JsonResult reg(User user){        // 创建响应结果对象        JsonResult result = new JsonResult<>();        try {            userService.reg(user);            result.setState(200);            result.setMessage("注册成功");        } catch (UsernameDuplicatedException e) {            result.setState(400);            result.setMessage("用户名被占用");        }catch (InsertException e){            result.setState(500);            result.setMessage("注册时产生未知的异常");        }        return result;    }}
  1. 启动服务,在浏览器输入访问地址,可以看到成功输出信息再次访问该地址,报用户名占用异常去数据库查看生成的用户名信息

5.4 控制层优化设计

在控制层抽离一个父类,在这个父类中统一的去处理关于异常的相关操作,编写一个BaseController类,统一处理异常。

package com.cy.store.controller;import com.cy.store.service.ex.InsertException;import com.cy.store.service.ex.ServiceException;import com.cy.store.service.ex.UsernameDuplicatedException;import com.cy.store.util.JsonResult;import org.springframework.web.bind.annotation.ExceptionHandler;/** * 控制层类的基类 */public class BaseController {    /**     * 操作成功的状态     */    public static  final int OK = 200;    //请求处理方法,这个方法的返回值就是需要传递给前端的数据    //自动将异常对象传递给此方法的参数列表上    //当前项目中产生了异常,会被统一拦截到此方法中,这个方法此时就充当的是请求处理方法,方法的返回值直接给到前端。    @ExceptionHandler(ServiceException.class)  //用于统一处理抛出的异常    public JsonResult handleException(Throwable e){            JsonResult result = new JsonResult<>(e);            if (e instanceof UsernameDuplicatedException){                result.setState(4000);                result.setMessage("用户名已经被占用");            } else if (e instanceof InsertException) {                result.setState(5000);                result.setMessage("注册时产生未知的异常");            }            return result;    }}

重新构建了reg()方法

// @Controller@RestController //controller+ResponseBody@RequestMapping("users")public class UserController extends BaseController {    @Autowired    private IUserService userService;    @RequestMapping("reg")    // @ResponseBody //表示此方法的响应结果以json格式进行数据的相应给到前端,为了防止在所有方法上添加,在类上使用注解 @RestController    public JsonResult reg(User user){        userService.reg(user);        return  new JsonResult<>(OK);    }}

关键词: