1、扫码点餐——服务端系统搭建与使用说明

创建服务端Java项目

idea中操作路径如下:
选择File——> New ——> Project
进入到创建项目的页面

在这里插入图片描述
Name:项目名字
Group:唯一标识您的项目,通常以颠倒的公司域名开头。
Artifact:组内工件的名称,通常是项目名称。
Package name:通常是Group + Artifact 的组合,可自行调整为自己所需 内容
在这里插入图片描述
点击next 后进行到下一项,按自己所需的内容来选择所需jar包添加进来。
点击create 完成创建。

在这里插入图片描述

创建系统内的模块

在刚刚创建的项目上右键,New——> Moudle
弹窗后的包结构保持项目一致即可。
在这里插入图片描述

项目结构

项目创建完成之后,目录结构如下图所示
yuxuntoo-base-api:小程序api接口
yuxuntoo-base-manage:后台管理系统
yuxuntoo-base-common:通用模块
yuxuntoo-base-core:核心包
yuxuntoo-base-db:操作数据库entity、mapper、service
在这里插入图片描述

核心包的使用

核心包中引入了基础包,包含了返回封装对象以及统一异常处理。

统一返回对象

对象封装了返回code码,提示信息,返回结果对象,签名及加密数据
代码如下:

public class ApiResult implements Serializable {
    private String resultCode;
    public String msg;
    public Object data;
    private String encryptData;
    private String sign;

    public ApiResult() {
        this.resultCode = ApiResponse.SUCCESS.getResCode();
        this.msg = ApiResponse.SUCCESS.getResDesc();
    }

    public ApiResult(String resultCode, String msg, Object data, String encryptData, String sign) {
        this.resultCode = resultCode;
        this.msg = msg;
        this.data = data;
        this.encryptData = encryptData;
        this.sign = sign;
    }

    public static ApiResult ok() {
        return new ApiResult();
    }

    public static ApiResult ok(Map<String, Object> data) {
        return new ApiResult(ApiResponse.SUCCESS.getResCode(), ApiResponse.SUCCESS.getResDesc(), data, (String)null, (String)null);
    }

    public static ApiResult ok(String key, Object value) {
        Map<String, Object> data = new HashMap();
        data.put(key, value);
        return new ApiResult(ApiResponse.SUCCESS.getResCode(), ApiResponse.SUCCESS.getResDesc(), data, (String)null, (String)null);
    }

    public static ApiResult ok(Object value) {
        return new ApiResult(ApiResponse.SUCCESS.getResCode(), ApiResponse.SUCCESS.getResDesc(), value, (String)null, (String)null);
    }

    public static ApiResult fail(ApiResponse apiResponse, String... params) {
        if (params != null && params.length > 0) {
            StringBuilder sb = new StringBuilder();

            for(int i = 0; i < params.length; ++i) {
                if (i < params.length - 1) {
                    sb.append(params[i]).append(" ");
                } else {
                    sb.append(params[i]);
                }
            }

            return new ApiResult(apiResponse.getResCode(), sb.toString(), (Object)null, (String)null, (String)null);
        } else {
            return new ApiResult(apiResponse.getResCode(), apiResponse.getResDesc(), (Object)null, (String)null, (String)null);
        }
    }

    public static ApiResult customInfo(ApiResponse apiResponse, String msg, Map<String, Object> data) {
        return !StringUtils.isEmpty(msg) ? new ApiResult(apiResponse.getResCode(), msg, data, (String)null, (String)null) : new ApiResult(apiResponse.getResCode(), apiResponse.getResDesc(), data, (String)null, (String)null);
    }

    public String getResultCode() {
        return this.resultCode;
    }

    public void setResultCode(String resultCode) {
        this.resultCode = resultCode;
    }

    public String getMsg() {
        return this.msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return this.data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public String getEncryptData() {
        return this.encryptData;
    }

    public void setEncryptData(String encryptData) {
        this.encryptData = encryptData;
    }

    public String getSign() {
        return this.sign;
    }

    public void setSign(String sign) {
        this.sign = sign;
    }

    public String toString() {
        return "ApiResult{resultCode='" + this.resultCode + '\'' + ", msg='" + this.msg + '\'' + ", data=" + this.data + '}';
    }
}

统一异常处理

统一异常处理模块中默认实现了几类异常,可根据自己代码中的内容来抛出异常,具体的实现如下图:
在这里插入图片描述

异常处理

异常处理会进行统一处理,放到Handler中。
这里不活了我们自定义的BaseException、系统中的sql异常SQLIntegrityConstraintViolationException、NoSuchMethodException等等。完全可以按照自己所需的异常添加进此Handler中。

异常处理器代码如下:

public class YuXunTooExceptionHandler {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    public YuXunTooExceptionHandler() {
    }

    @ExceptionHandler({BaseException.class})
    public ApiResult handle(BaseException e) {
        this.logger.error("=======捕获异常信息=======", e);
        ApiResponse response = e.getResponse();
        this.logger.info("{}:==={}", response.toString(), e.getMessage());
        return response != null && !StringUtils.isBlank(response.getResDesc()) ? ApiResult.fail(e.getResponse(), new String[]{e.getMessage()}) : ApiResult.fail(e.getResponse(), new String[]{e.getMessage()});
    }

    @ExceptionHandler({SQLIntegrityConstraintViolationException.class})
    public ApiResult sQLIntegrityConstraintViolationException(SQLIntegrityConstraintViolationException exception) {
        this.logger.warn("SQLIntegrityConstraintViolationException:违反数据库索引规则");
        ApiResult result = new ApiResult();
        result.setResultCode(ApiResponse.DATABASE_SERVICES_ERROR.getResCode());
        result.setMsg(ApiResponse.DATABASE_SERVICES_ERROR.getResDesc());
        return result;
    }

    @ExceptionHandler({SQLException.class})
    public ApiResult sQLIntegrityConstraintViolationException(SQLException exception) {
        this.logger.warn("SQLException:SQL异常===={}", exception.getMessage());
        ApiResult result = new ApiResult();
        result.setResultCode(ApiResponse.DATABASE_SQL_ERROR.getResCode());
        result.setMsg(ApiResponse.DATABASE_SQL_ERROR.getResDesc());
        return result;
    }

    @ExceptionHandler({NoSuchMethodException.class})
    public ApiResult noSuchMethodExceptionException(SQLException exception) {
        this.logger.warn("NoSuchMethodException:===={}", exception.getMessage());
        ApiResult result = new ApiResult();
        result.setResultCode(ApiResponse.NO_SUCHMETHOD.getResCode());
        result.setMsg(ApiResponse.NO_SUCHMETHOD.getResDesc());
        return result;
    }
}

工具类

基础包中也有很多基础工具类,可咨询获取基础包,拿到基础包后,看代码中的使用。具体工具类对应包关系
date:日期相关工具类
file: 文件相关工具类
string:字符串相关工具类
request:请求相关工具类
在这里插入图片描述

结束语

服务端系统搭建如其他项目创建一样简单,并无其他复杂操作。工具类的说明如上所述。

欢迎大家留言交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ybb_ymm

你的鼓励会是对我最大的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值