4.注册模块-控制层开发

响应体

  • 响应体应该包含状态码,描述信息(如果需要的话),响应数据(如果需要的话)

    package com.cy.store.util;
    
    import java.io.Serializable;
    
    /**
     * @author ZhangHailong
     * @date 2022/5/10 - 9:12
     * @project_name 统一使用json格式的数据进行响应
     */
    public class JsonResult<E> implements Serializable{
    
        // 响应体包含状态码,描述信息,响应数据
    
        private Integer state;
        private String message;
        private E data; // 响应的数据可以是任何类型,所以用泛型
    
        public JsonResult() {
        }
    
        public JsonResult(Integer state) {
            this.state = state;
        }
    
        public JsonResult(String message) {
            this.message = message;
        }
    
        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;
        }
    }
    

统一异常处理

  • 因为在业务层会抛出异常,在控制层会根据不同的异常情况向前端返回响应结果,但是随着业务层功能的增加,所有的异常处理和调用业务方法等处理堆积在一块会显得代码很繁琐,所以,创建一个控制层基类,用于同一处理业务层抛出来的异常

    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;
    
    /**
     * @author ZhangHailong
     * @date 2022/5/10 - 9:31
     * @project_name 控制层基类,主要用于处理异常
     */
    public class BaseController {
    
        public static final int OK = 200;
    
        /*
        * @ExceptionHandler(ServiceException.class)表示统一处理ServiceException类型的异常
        * 返回值是需要传递给前端的数据
        * 自动将异常对象传递给此方法的参数列表
        * */
        @ExceptionHandler(ServiceException.class)
        public JsonResult<Void> handleServiceException(Throwable e) {
            // 注册模块无需传递给前端数据
            JsonResult<Void> result = new JsonResult<>();
            if (e instanceof UsernameDuplicatedException) {
                result.setState(4000);
                // result.setMessage(e.getMessage());
            } else if (e instanceof InsertException) {
                result.setState(5000);
                // result.setMessage(e.getMessage());
            }
            result.setMessage(e.getMessage()); // 不同的异常,e.getMessage()是不同的
    
            return result;
        }
    }
    

控制层代码

  • 控制层将异常处理交给控制基类,那么只需要关注在没有异常的情况下的处理逻辑

    package com.cy.store.controller;
    
    import com.cy.store.entity.User;
    import com.cy.store.service.IUserService;
    import com.cy.store.util.JsonResult;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @author ZhangHailong
     * @date 2022/5/10 - 9:29
     * @project_name 用户模块控制层
     */
    
    @RequestMapping("users")
    @RestController
    public class UserController extends BaseController{
    
        @Autowired
        private IUserService iUserService;
    
        @RequestMapping("register")
        public JsonResult<Void> registerUserController(User user) {
            iUserService.registerUser(user);
    
            // 如果上一步有异常,直接跳转到BaseController处理,其处理完毕直接向前端返回请求结果,以下代码就不再执行
            // 如果上一步没有异常,说明注册成功,返回JsonResult结果
            return new JsonResult<>(OK);
    
        }
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值