可以参考完整的代码:https://gitee.com/juncaoit/onlineclass
这里通过小滴课堂的学习,然后进行了代码参考借鉴。
一:大致说明
1.数据库
mysql
2.包括模块
用户
视频
订单
3.技术
springboot
mybatis
Jwt
mysql
Gauva
二:细节
1.数据库与mybatis的配置
server.port=8089 spring.datasource.driver-class-name =com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://127.0.0.1:3306/online_xdclass?useUnicode=true&characterEncoding=utf-8&useSSL=false spring.datasource.username=root spring.datasource.password=123456 mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl mybatis.configuration.map-underscore-to-camel-case=true mybatis.mapper-locations=classpath:mapper/*.xml mybatis.type-aliases-package=com.jun.onlineclass.model.entity
2.全局设置
返回格式的定义
package com.jun.onlineclass.utils; import lombok.Data; @Data public class JsonData { /** * 状态码 0表示成功过,1表示处理中,-1 表示失败 */ private Integer code; /** * 业务数据 */ private Object data; /** * 信息表示 */ private String msg; public JsonData() { } public JsonData(Integer code, Object data, String msg) { this.code = code; this.data = data; this.msg = msg; } /** * 成功,不用返回数据 */ public static JsonData buildSuccess() { return new JsonData(0, null, null); } /** * 成功,返回数据 */ public static JsonData buildSuccess(Object data) { return new JsonData(0, data, null); } /** * 失败,固定状态码 */ public static JsonData buildError(String msg) { return new JsonData(-1, null, msg); } /** * 失败,自定义错误码和信息 */ public static JsonData buildError(Integer code, String msg) { return new JsonData(code, null, msg); } }
异常捕获异常处理:
异常dto:
package com.jun.onlineclass.exception; import lombok.Data; /** * 自定义异常类 */ @Data public class XDException extends RuntimeException { private Integer code; private String msg; public XDException(Integer code, String msg) { this.code = code; this.msg = msg; } }
处理:
package com.jun.onlineclass.exception; import com.jun.onlineclass.utils.JsonData; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; /** * 异常处理类 */ @ControllerAdvice @Slf4j public class CustomExceptionHandler { @ExceptionHandler(value = Exception.class) @ResponseBody public JsonData handle(Exception e) { log.error("系统异常", e); if (e instanceof XDException) { XDException xdException = (XDException) e; return JsonData.buildError(xdException.getCode(), xdException.getMsg()); } else { return JsonData.buildError("全局异常,未知错误"); } } }
3.web目录设置
* 不用权限可以访问url /api/v1/pub/
* 要登录可以访问url /api/v1/pri/
4.拦截器设置
主要有跨域拦截处理,以及登录拦截处理
package com.jun.onlineclass.config; import com.jun.onlineclass.interceptor.CorsInterceptor; import com.jun.onlineclass.interceptor.LoginInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; /** * 拦截器配置 * <p> * 不用权限可以访问url /api/v1/pub/ * 要登录可以访问url /api/v1/pri/ */ @Configuration public class InterceptorConfig implements WebMvcConfigurer { @Bean LoginInterceptor loginInterceptor() { return new LoginInterceptor(); } @Bean CorsInterceptor corsInterceptor() { return new CorsInterceptor(); } @Override public void addInterceptors(InterceptorRegistry registry) { // 拦截全部路径,这个跨域需要放在最上面 registry.addInterceptor(corsInterceptor()).addPathPatterns("/**"); //拦截全部 registry.addInterceptor(loginInterceptor()) // 拦截哪些路径 .addPathPatterns("/api/v1/pri/*/*/**") //不拦截哪些路径 斜杠一定要加 .excludePathPatterns("/api/v1/pri/user/login", "/api/v1/pri/user/register"); WebMvcConfigurer.super.addInterceptors(registry); } }
5.web的开发