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;
    }
}
View Code

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;
    }
}
View Code

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;
    }
}
View Code

CommonError

package com.miaoshaproject.error;

public interface CommonError {
    public int getErrCode();
    public String getErrMsg();
    public CommonError setErrMsg(String errMsg);
}
View Code

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;
    }
}
View Code

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;
    }
}
View Code

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");
    }
}
View Code

 

      

posted @ 2019-04-07 09:57  LLC-Mite  阅读(138)  评论(0编辑  收藏  举报