springboot秒杀课程学习整理1-2
1)从数据库到前端,做了三层转换,最后统一返回给前端的格式
DO-> model:
放在service中,目的是为了组装来自于数据库的数据,有些字段来自于不同的表的取,这一层相当于真正的业务模型
->VO
放在controller中,目的是返回给前端真正需要的数据,而不是返回所有的Model中的数据
->commonReturnType(统一返回的格式)
放在独立的包中,用于处理放回给前端固定的数据类型,以便于前端坐判断处理以及提示
2)创建一个error的包:用于存放公共的错误码,异常拦截(正常异常时会抛到tomcat容器中前端的status是500,这里拦击设置status 200)
CommonError 接口类定义需要实现的方法
EmBusinessError 实现CommonError接口,定义错误码
BusinessException 继承Exception并且实现CommonError类,用于抛出业务异常
3)在Controller层添加BaseController类
该类用于拦截异常,设置status为ok,这里如果不拦截那么前端获取到的是500拿不到任何信息,判断是否是业务类异常,如果是使用相应的 code码返回,如果不是那么也应该给予前端相应的code码,以便前端更好的提示用户
下面是实现的代码:
UserModel
package com.miaoshaproject.service.model;
public class UserModel {
private Integer id;
private String name;
private String gender;
private Integer age;
private String registerMode;
private Integer thirdPartyId;
private String telphone;
private String enCrptPassword;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getRegisterMode() {
return registerMode;
}
public void setRegisterMode(String registerMode) {
this.registerMode = registerMode;
}
public Integer getThirdPartyId() {
return thirdPartyId;
}
public void setThirdPartyId(Integer thirdPartyId) {
this.thirdPartyId = thirdPartyId;
}
public String getTelphone() {
return telphone;
}
public void setTelphone(String telphone) {
this.telphone = telphone;
}
public String getEnCrptPassword() {
return enCrptPassword;
}
public void setEnCrptPassword(String enCrptPassword) {
this.enCrptPassword = enCrptPassword;
}
}
UserVO
package com.miaoshaproject.controller.viewobject;
public class UserVO {
private Integer id;
private String name;
private String gender;
private Integer age;
private String registerMode;
private Integer thirdPartyId;
private String telphone;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getRegisterMode() {
return registerMode;
}
public void setRegisterMode(String registerMode) {
this.registerMode = registerMode;
}
public Integer getThirdPartyId() {
return thirdPartyId;
}
public void setThirdPartyId(Integer thirdPartyId) {
this.thirdPartyId = thirdPartyId;
}
public String getTelphone() {
return telphone;
}
public void setTelphone(String telphone) {
this.telphone = telphone;
}
}
CommonReturnType
package com.miaoshaproject.response;
public class CommonReturnType {
private String status;
private Object data;
public static CommonReturnType create(Object data){
return CommonReturnType.create(data,"success");
}
public static CommonReturnType create(Object data,String status){
CommonReturnType type=new CommonReturnType();
type.setData(data);
type.setStatus(status);
return type;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
CommonError
package com.miaoshaproject.error;
public interface CommonError {
public int getErrCode();
public String getErrMsg();
public CommonError setErrMsg(String errMsg);
}
EmBusinessError
package com.miaoshaproject.error;
public enum EmBusinessError implements CommonError {
USER_NOT_EXIST(10001,"用户不存在"),
UNKOWN_ERROR(10002,"未知错误"),
PARAMTER_VALIDATION_ERROR(20001,"参数校验不通过")
;
private int errCode;
private String errMsg;
private EmBusinessError(int errCode,String errMsg){
this.errCode=errCode;
this.errMsg=errMsg;
}
@Override
public int getErrCode() {
return this.errCode;
}
@Override
public String getErrMsg() {
return this.errMsg;
}
@Override
public CommonError setErrMsg(String errMsg) {
this.errMsg=errMsg;
return this;
}
}
BusinessException
package com.miaoshaproject.error;
//包装器业务异常类实现
public class BusinessException extends Exception implements CommonError{
private CommonError commonError;
//直接接收EmBusinessError的传参用于构造业务异常
public BusinessException(CommonError commonError){
super();
this.commonError=commonError;
}
//直接接收EmBusinessError,errMsg的的传参用于构造业务异常
public BusinessException(CommonError commonError,String errMsg){
super();
this.commonError=commonError;
this.commonError.setErrMsg(errMsg);
}
@Override
public int getErrCode() {
return this.commonError.getErrCode();
} @Override
public String getErrMsg() {
return this.commonError.getErrMsg();
} @Override
public CommonError setErrMsg(String errMsg) {
this.commonError.setErrMsg(errMsg);
return this;
}
}
BaseController
package com.miaoshaproject.controller; import com.miaoshaproject.error.BusinessException;
import com.miaoshaproject.error.EmBusinessError;
import com.miaoshaproject.response.CommonReturnType;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus; import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map; public class BaseController {
@ExceptionHandler
@ResponseStatus (HttpStatus.OK)
@ResponseBody
public CommonReturnType handlerException(HttpServletRequest request, Exception ex){
Map<String,Object> responseData = new HashMap<>();
if(ex instanceof BusinessException){
BusinessException businessException = (BusinessException)ex;
responseData.put("errCode",businessException.getErrCode());
responseData.put("errMsg",businessException.getErrMsg());
}else{
responseData.put("errCode", EmBusinessError.UNKOWN_ERROR.getErrCode());
responseData.put("errMsg",EmBusinessError.UNKOWN_ERROR.getErrMsg());
}
return CommonReturnType.create(responseData,"fail");
}
}
springboot秒杀课程学习整理1-2的更多相关文章
- springboot秒杀课程学习整理1-6
1)活动模型设计 配饰秒杀的模型(promoModel)id promoName startDate(建议使用joda-time) endDate itemId promoItemPrice 数据库( ...
- springboot秒杀课程学习整理1-1
1)新建一个maven工程quickStart,然后在pom文件里添加依赖 <parent> <groupId>org.springframework.boot</gro ...
- springboot秒杀课程学习整理1-5
1)交易模型设计 交易模型(用户下单的交易模型)OrderModel id(String 交易单号使用String), userId,itemId,amount(数量),orderAmount(总金额 ...
- springboot秒杀课程学习整理1-3
1)实现手机验证码功能,用户注册功能,用户登入功能(这里讲开发流程,及本人遇到的问题,具体实现请看代码) 1.拦截请求,获取请求参数(这里的consumes是个常量,可以定义在baseControll ...
- springboot秒杀课程学习整理1-4
1)商品模型设计 (应该是先设计商品的model,然后才是数据库表) 模型字段(id,title,price(double),stock(库存),description,sales,imgUrl) 创 ...
- SpringBoot源码学习系列之异常处理自动配置
SpringBoot源码学习系列之异常处理自动配置 1.源码学习 先给个SpringBoot中的异常例子,假如访问一个错误链接,让其返回404页面 在浏览器访问: 而在其它的客户端软件,比如postm ...
- 201671010450-姚玉婷-实验十四 团队项目评审&课程学习总结
项目 内容 所属科目 软件工程http://www.cnblogs.com/nwnu-daizh 作业要求 https://www.cnblogs.com/nwnu-daizh/p/11093584. ...
- 金生芳-实验十四 团队项目评审&课程学习总结
实验十四 团队项目评审&课程学习总结 项目 内容 这个作业属于哪个课程 [教师博客主页链接] 这个作业的要求在哪里 [作业链接地址] 作业学习目标 (1)掌握软件项目评审会流程(2)反思总结课 ...
- 201671030117 孙欢灵 实验十四 团队项目评审&课程学习总结
项目 内容 作业所属课程 所属课程 作业要求 作业要求 课程学习目标 (1)掌握软件项目评审会流程:(2)反思总结课程学习内容 任务一:团队项目审核已完成.项目验收过程意见表已上交. 任务二:课程学习 ...
随机推荐
- Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析
Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析 今天发一篇”水文”,可能很多读者都会表示不理解,不过我想把它作为并发序列文章中不可缺少的一块来介绍.本来以为花不了 ...
- day 04
今天学些的内容 流程控制 1.在python一般代码执行顺序都从上到下依次解释执行称为顺序结构. 2.然而遇到需要一些条件判断的时候需要选择不同的执行路线去解释执行 这种流程控制称为 分支结构 也可叫 ...
- image management in kubernet
Image How can I edit an existing docker image metadata? docker-copyedit Registry Disk kubevirtis a g ...
- standby_file_management参数为MANUAL导致添加数据文件错误
症状:standby_file_management 在MANUAL模式下添加数据文件报错处理: 1.standby_file_management为MANUAL,主库添加数据文件,从库发现如下报错: ...
- Windows Server Backup(2016) 备份
1. 使用 Windows Server Backup 备份 如果服务器没有启用 Windows Server Backup,需要打开服务器管理器,如下图 点击添加角色和功能,根据向导,添加 Wind ...
- 清北学堂北京大学冯哲神仙讲课day2
今天讲基础数据结构 首先讲(二叉搜索树) 保证左儿子小于右儿子,那么对于根节点来说.大于根节点的放到右子树递归,小于根节点的放在左子树 相等的呢?某大佬(老师)这么说: 删除的前提是找这个点在哪: 如 ...
- Java链接MySQL数据库的用配置文件和不用配置文件的代码
1.利用配置文件(db.properties)链接MySQL数据库 package tool; import java.io.FileInputStream;import java.sql.Conne ...
- dt转换List CovertListHelper
public class CovertListHelper { //传递过来的类型必须与数据库类型保持一致问题 public List<T> convertToList<T>( ...
- vue3.0使用axios报错问题记录
vue-cli3.0使用axios的时候出现错误,记录一下 报错信息: Uncaught TypeError: Cannot set property $axios of #<Vue> w ...
- win10家庭版安装Docker for Windows
0. 背景 硬件:小米笔记本 Air 13/Inter Core i7-7500U 操作系统:Windows 10 家庭中文版 补丁:截止2019/1/25最新稳定补丁 Docker:Docker W ...