springboot入门项目-用户注册3-控制层

1. 创建响应

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

package com.cy.store.utils;

import lombok.Data;

import java.io.Serializable;

@Data
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(Throwable e) {
        this.message = e.getMessage();
    }

    public JsonResult(Integer state, E data) {
        this.state = state;
        this.data = data;
    }
}
2. 编写一个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.UserDuplicatedException;
import com.cy.store.utils.JsonResult;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;

//控制层类的基类
@RestController //@Controller + @ResponseBody
public class BaseController {
    public static final int OK = 200;

    //自动将异常对象传递给此方法的参数列表上
    //当前项目中产生的异常,会被统一拦截到此方法中,这个方法此时充当了请求处理方法,方法的返回值直接给到前端
    @ExceptionHandler(ServiceException.class) //用于统一处理抛出的异常
    public JsonResult handleException(Throwable e) {
        JsonResult<Object> jsonResult = new JsonResult<>(e);
        if(e instanceof UserDuplicatedException) {
            jsonResult.setState(4000);
            jsonResult.setMessage("用户名被占用");
        }
        if(e instanceof InsertException) {
            jsonResult.setState(5000);
            jsonResult.setMessage("注册时产生未知的异常");
        }
        return jsonResult;
    }
}
3. 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.UserDuplicatedException;
import com.cy.store.utils.JsonResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import static com.cy.store.controller.BaseController.OK;

@RestController
@RequestMapping("users")
public class UserController extends BaseController{

    @Autowired
    private IUserService userService;

    @RequestMapping("/reg")
    public JsonResult<Object> regist(User user) {
        userService.register(user);
        return new JsonResult<>(OK);
//        JsonResult<Object> result = new JsonResult<>();
//        try {
//            userService.register(user);
//            result.setState(200);
//            result.setMessage("用户注册成功");
//        } catch (UserDuplicatedException e) {
//            result.setState(4000);
//            result.setMessage("用户名被占用");
//        }catch (InsertException e) {
//            result.setState(5000);
//            result.setMessage("注册时产生未知的异常");
//        }
//        return result;
    }
}
4. 测试
  1. 启动主程序类
  2. 浏览器中输入:http://localhost:8080/users/reg?username=marry&password=333
    注册成功时返回以下数据:
    在这里插入图片描述
    用户名重复时返回以下数据:
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值