p1 创建springBoot项目

打开Idea ,选择新建项目

图片

如果服务器的url不是国内的,可以先修改成阿里的 地址是 start.aliyun.com

图片

修改后创建项目的速度会快很多

然后按照如下图所示创建项目

图片

点击下一步后,会出现让你选择maven依赖选项

图片

选好以后点击创建 就可以了。

pom.xml文件

&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br>&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br>         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"&gt;<br>    &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br>    &lt;parent&gt;<br>        &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;<br>        &lt;artifactId&gt;spring-boot-starter-parent&lt;/artifactId&gt;<br>        &lt;version&gt;2.5.9&lt;/version&gt;<br>        &lt;relativePath/&gt; &lt;!-- lookup parent from repository --&gt;<br>    &lt;/parent&gt;<br>    &lt;groupId&gt;com.wg&lt;/groupId&gt;<br>    &lt;artifactId&gt;wg-springBoot&lt;/artifactId&gt;<br>    &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;<br>    &lt;name&gt;springboot&lt;/name&gt;<br>    &lt;description&gt;wg-springBoot&lt;/description&gt;<br>    &lt;properties&gt;<br>        &lt;java.version&gt;1.8&lt;/java.version&gt;<br>    &lt;/properties&gt;<br>    &lt;dependencies&gt;<br>        &lt;dependency&gt;<br>            &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;<br>            &lt;artifactId&gt;spring-boot-starter-web&lt;/artifactId&gt;<br>        &lt;/dependency&gt;<br><br>        &lt;!-- mybatis --&gt;<br>        &lt;dependency&gt;<br>            &lt;groupId&gt;org.mybatis.spring.boot&lt;/groupId&gt;<br>            &lt;artifactId&gt;mybatis-spring-boot-starter&lt;/artifactId&gt;<br>            &lt;version&gt;2.1.0&lt;/version&gt;<br>        &lt;/dependency&gt;<br><br>        &lt;!-- 分页器 --&gt;<br>        &lt;dependency&gt;<br>            &lt;groupId&gt;com.github.pagehelper&lt;/groupId&gt;<br>            &lt;artifactId&gt;pagehelper-spring-boot-starter&lt;/artifactId&gt;<br>            &lt;version&gt;1.2.5&lt;/version&gt;<br>        &lt;/dependency&gt;<br><br>        &lt;!-- mysql数据库驱动 --&gt;<br>        &lt;dependency&gt;<br>            &lt;groupId&gt;mysql&lt;/groupId&gt;<br>            &lt;artifactId&gt;mysql-connector-java&lt;/artifactId&gt;<br>            &lt;scope&gt;runtime&lt;/scope&gt;<br>        &lt;/dependency&gt;<br><br>        &lt;!-- lombok --&gt;<br>        &lt;dependency&gt;<br>            &lt;groupId&gt;org.projectlombok&lt;/groupId&gt;<br>            &lt;artifactId&gt;lombok&lt;/artifactId&gt;<br>            &lt;optional&gt;true&lt;/optional&gt;<br>        &lt;/dependency&gt;<br><br>        &lt;dependency&gt;<br>            &lt;groupId&gt;org.apache.velocity&lt;/groupId&gt;<br>            &lt;artifactId&gt;velocity-engine-core&lt;/artifactId&gt;<br>            &lt;version&gt;2.3&lt;/version&gt;<br>        &lt;/dependency&gt;<br><br><br>        &lt;!-- hutool  --&gt;<br>        &lt;dependency&gt;<br>            &lt;groupId&gt;cn.hutool&lt;/groupId&gt;<br>            &lt;artifactId&gt;hutool-all&lt;/artifactId&gt;<br>            &lt;version&gt;5.7.20&lt;/version&gt;<br>        &lt;/dependency&gt;<br><br>        &lt;!-- 工具类 --&gt;<br>        &lt;dependency&gt;<br>            &lt;groupId&gt;org.apache.poi&lt;/groupId&gt;<br>            &lt;artifactId&gt;poi-ooxml&lt;/artifactId&gt;<br>            &lt;version&gt;4.1.2&lt;/version&gt;<br>        &lt;/dependency&gt;<br><br>        &lt;!-- saToken 依赖 --&gt;<br>        &lt;dependency&gt;<br>            &lt;groupId&gt;cn.dev33&lt;/groupId&gt;<br>            &lt;artifactId&gt;sa-token-spring-boot-starter&lt;/artifactId&gt;<br>            &lt;version&gt;1.37.0&lt;/version&gt;<br>        &lt;/dependency&gt;<br><br>        &lt;!-- 邮箱 javaMail --&gt;<br>        &lt;dependency&gt;<br>            &lt;groupId&gt;com.sun.mail&lt;/groupId&gt;<br>            &lt;artifactId&gt;javax.mail&lt;/artifactId&gt;<br>            &lt;version&gt;1.6.2&lt;/version&gt;<br>        &lt;/dependency&gt;<br><br>        &lt;!--参数校验Valid--&gt;<br>        &lt;dependency&gt;<br>            &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;<br>            &lt;artifactId&gt;spring-boot-starter-validation&lt;/artifactId&gt;<br>        &lt;/dependency&gt;<br><br>        &lt;!-- swagger2  --&gt;<br>        &lt;dependency&gt;<br>            &lt;groupId&gt;io.springfox&lt;/groupId&gt;<br>            &lt;artifactId&gt;springfox-swagger2&lt;/artifactId&gt;<br>            &lt;version&gt;2.8.0&lt;/version&gt;<br>        &lt;/dependency&gt;<br>        &lt;dependency&gt;<br>            &lt;groupId&gt;io.springfox&lt;/groupId&gt;<br>            &lt;artifactId&gt;springfox-swagger-ui&lt;/artifactId&gt;<br>            &lt;version&gt;2.8.0&lt;/version&gt;<br>        &lt;/dependency&gt;<br>        &lt;!-- 引入swagger-bootstrap-ui包 --&gt;<br>        &lt;dependency&gt;<br>            &lt;groupId&gt;com.github.xiaoymin&lt;/groupId&gt;<br>            &lt;artifactId&gt;swagger-bootstrap-ui&lt;/artifactId&gt;<br>            &lt;version&gt;1.8.5&lt;/version&gt;<br>        &lt;/dependency&gt;<br><br>        &lt;!-- IP解析 --&gt;<br>        &lt;dependency&gt;<br>            &lt;groupId&gt;org.lionsoul&lt;/groupId&gt;<br>            &lt;artifactId&gt;ip2region&lt;/artifactId&gt;<br>            &lt;version&gt;2.6.5&lt;/version&gt;<br>        &lt;/dependency&gt;<br>    &lt;/dependencies&gt;<br><br>    &lt;build&gt;<br>        &lt;plugins&gt;<br>            &lt;plugin&gt;<br>                &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;<br>                &lt;artifactId&gt;spring-boot-maven-plugin&lt;/artifactId&gt;<br>                &lt;configuration&gt;<br>                    &lt;excludes&gt;<br>                        &lt;exclude&gt;<br>                            &lt;groupId&gt;org.projectlombok&lt;/groupId&gt;<br>                            &lt;artifactId&gt;lombok&lt;/artifactId&gt;<br>                        &lt;/exclude&gt;<br>                    &lt;/excludes&gt;<br>                &lt;/configuration&gt;<br>            &lt;/plugin&gt;<br>        &lt;/plugins&gt;<br>    &lt;/build&gt;<br>&lt;/project&gt;

p2 配置maven国内阿里镜像

有时候在国内使用maven国外镜像下载jar包会很慢 , 所以一般会配置国内阿里云的maven仓库来进行加速

首先咱们打开设置项

图片

在设置弹框内搜索 maven ,在构建工具内找到 maven 选项

图片

一般idea会内置一个maven  在没有硬性要求下 可以直接使用这个

在电脑文件夹上面找到这俩个项目文件路径

图片

在settings.xml上面修改如下选项

图片

把这个mirrors 改成阿里的

 &lt;mirrors&gt;<br>    &lt;mirror&gt;<br>      &lt;id&gt;nexus-aliyun&lt;/id&gt;<br>      &lt;mirrorOf&gt;central&lt;/mirrorOf&gt;<br>      &lt;name&gt;Nexus aliyun&lt;/name&gt;<br>      &lt;url&gt;http://maven.aliyun.com/nexus/content/groups/public&lt;/url&gt;<br>    &lt;/mirror&gt;<br>  &lt;/mirrors&gt;

然后找到依赖仓库的存放文件夹

图片

把这里改成自己对应仓库的文件夹目录即可

修改好后保存退出

然后回到项目 打开maven

图片

在执行第二步的时候 看到如下图所示则代表配置成功

图片


p3 配置mybatis,mysql 重试    错误原因

mybatis 对应的maven依赖如下

 &lt;dependency&gt;<br>      &lt;groupId&gt;org.mybatis.spring.boot&lt;/groupId&gt;<br>      &lt;artifactId&gt;mybatis-spring-boot-starter&lt;/artifactId&gt;<br>      &lt;version&gt;2.1.0&lt;/version&gt;<br>  &lt;/dependency&gt;

引入依赖后,在pom.xml文件右上角会出现一个导入的按钮,点击即可

application.yml 内配置mybatis 重试    错误原因

# mybatis的配置<br>mybatis:<br>  #扫描所有mybatis的xml文件,这里的路径 classpath: 指的是在 项目的resources 目录下<br>  mapper-locations: classpath:mapper/*.xml

注意,配置了该依赖,则需要在application.yml内配置数据库连接地址:

引入数据库驱动,maven依赖如下

&lt;!-- mysql数据库驱动 --&gt;<br>&lt;dependency&gt;<br>  &lt;groupId&gt;mysql&lt;/groupId&gt;<br>  &lt;artifactId&gt;mysql-connector-java&lt;/artifactId&gt;<br>&lt;/dependency&gt;

application.yml 内配置mysql数据库连接:

spring:<br>  datasource:<br>    # 数据库驱动,必须要引入 mysql数据库驱动 才能找得到这个包<br>    driver-class-name: com.mysql.cj.jdbc.Driver<br>    # 数据库的连接地址 serverTimezone 是时区的意思 %2b 是 "+" 号的意思 GMT%2b8 代表时区为东八区<br>    url: jdbc:mysql://localhost:3306/wg-springBoot?serverTimezone=GMT%2b8<br>    username: root<br>    password: tw19960705

配置完成后,可以运行一下项目


p4 logback-xml日志控制

在resources目录下增加logback.xml文件

图片

logback.xml 内容如下:

&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br>&lt;configuration  scan="true" scanPeriod="60 seconds" debug="false"&gt;<br>    &lt;contextName&gt;logback&lt;/contextName&gt;<br>    &lt;!--输出到控制台--&gt;<br>    &lt;appender name="console" class="ch.qos.logback.core.ConsoleAppender"&gt;<br>        &lt;!-- &lt;filter class="ch.qos.logback.classic.filter.ThresholdFilter"&gt;<br>             &lt;level&gt;ERROR&lt;/level&gt;<br>         &lt;/filter&gt;--&gt;<br>        &lt;encoder&gt;<br>            &lt;pattern&gt;%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n&lt;/pattern&gt;<br>        &lt;/encoder&gt;<br>    &lt;/appender&gt;<br><br>    &lt;!--按天生成日志--&gt;<br>    &lt;appender name="logFile"  class="ch.qos.logback.core.rolling.RollingFileAppender"&gt;<br>        &lt;Prudent&gt;true&lt;/Prudent&gt;<br>        &lt;rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"&gt;<br>            &lt;FileNamePattern&gt;<br>                logs/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.log<br>            &lt;/FileNamePattern&gt;<br>        &lt;/rollingPolicy&gt;<br>        &lt;layout class="ch.qos.logback.classic.PatternLayout"&gt;<br>            &lt;Pattern&gt;<br>                %d{yyyy-MM-dd HH:mm:ss} -%msg%n<br>            &lt;/Pattern&gt;<br>        &lt;/layout&gt;<br>    &lt;/appender&gt;<br><br>    &lt;root level="debug,ERROR"&gt;<br>        &lt;appender-ref ref="console" /&gt;<br>        &lt;appender-ref ref="logFile" /&gt;<br>    &lt;/root&gt;<br><br>    &lt;!-- &lt;logger name="com.pos" level="INFO" additivity="false"&gt;<br>        &lt;appender-ref ref="console"/&gt;<br>    &lt;/logger&gt; --&gt;<br>&lt;/configuration&gt;

application.yml 配置: 重试    错误原因

# log日志配置<br>logging:<br>  level:<br>    org.springframework.boot.autoconfigure: INFO<br>    # 对应项目的包路径<br>    com.wg.dao: DEBUG

配置好后启动项目就可以了…


p5  基于 Sa-token 的登陆认证

在pom.xml文件中引入依赖

&lt;!-- saToken 依赖 --&gt;<br>&lt;dependency&gt;<br>  &lt;groupId&gt;cn.dev33&lt;/groupId&gt;<br>  &lt;artifactId&gt;sa-token-spring-boot-starter&lt;/artifactId&gt;<br>  &lt;version&gt;1.37.0&lt;/version&gt;<br>&lt;/dependency&gt;

在application.yml内的配置如下:

############## Sa-Token 配置 (文档: https://sa-token.cc) ##############<br>sa-token:<br>  # token 名称(同时也是 cookie 名称)<br>  token-name: token<br>  # token 有效期(单位:秒) 默认30天,-1 代表永久有效<br>  timeout: 2592000<br>  # token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结<br>  active-timeout: -1<br>  # 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录)<br>  is-concurrent: true<br>  # 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token)<br>  is-share: true<br>  # token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik)<br>  token-style: random-128<br>  # 是否输出操作日志 (建议关闭)<br>  is-log: false

图片

新建一个配置类 SaTokenConfigure , 内容如下:

package com.wg.config;<br><br>import cn.dev33.satoken.exception.NotLoginException;<br>import cn.dev33.satoken.interceptor.SaInterceptor;<br>import cn.dev33.satoken.stp.StpUtil;<br>import com.wg.common.Constants;<br>import com.wg.exp.ServiceException;<br>import org.springframework.beans.factory.annotation.Value;<br>import org.springframework.context.annotation.Configuration;<br>import org.springframework.web.servlet.HandlerExceptionResolver;<br>import org.springframework.web.servlet.config.annotation.InterceptorRegistry;<br>import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;<br>import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;<br><br>import java.io.NotActiveException;<br><br>/**<br> * [Sa-Token 权限认证] 配置类<br> */<br>@Configuration<br>public class SaTokenConfigure implements WebMvcConfigurer {<br><br>    // 注册Sa-Token的注解拦截器,打开注解式鉴权功能<br>    @Override<br>    public void addInterceptors(InterceptorRegistry registry) {<br>        // 注册 Sa-Token 拦截器,校验规则为 StpUtil.checkLogin() 登录校验。<br>        registry.addInterceptor(new SaInterceptor(handle -&gt; StpUtil.checkLogin()))<br>                // 所有接口都需要鉴权<br>                .addPathPatterns("/**")<br>                // 放行登陆接口 (后续接口需要放行,在这里配置就行)<br>                .excludePathPatterns("/admin/login","/admin/register","/admin/sendEmailCode","/file/upload","/admin/updatePassword")<br>                // 放行静态资源<br>                .excludePathPatterns("/file/**","/favicon.ico","/swagger**/**","/webjars/**","/precache-manifest.**.js", "/v3/**","/service-worker.js","/doc.html");<br>    }<br>}

配置该类的目的是为了每次接口请求之前,先判断一下该用户是否已经登陆,  StpUtil.checkLogin() 方法就能够做  到

然后配置一下放行的接口,以及需要放行的静态文件

配置好后在启动类上添加这句话:

图片

每次启动如果打印了这句话, 代表配置没有问题;


p6 自定义异常

在如下位置添加类 ServiceException

图片

package com.wg.exp;<br><br>import lombok.Getter;<br><br>/**<br> * 自定义异常<br> */<br>@Getter<br>public class ServiceException extends RuntimeException {<br>    private String code;<br><br>    public ServiceException(String code, String msg) {<br>        super(msg);<br>        this.code = code;<br>    }<br>}<br>

继承 RuntimeException 运行时异常


p7 全局异常捕捉

在如下位置新建  GlobalExceptionHandler

图片

GlobalExceptionHandler 内容如下: 重试    错误原因

package com.wg.exp;<br>import cn.dev33.satoken.exception.NotLoginException;<br>import cn.hutool.log.Log;<br>import com.wg.common.Constants;<br>import com.wg.common.Result;<br>import org.springframework.validation.BindingResult;<br>import org.springframework.web.bind.MethodArgumentNotValidException;<br>import org.springframework.web.bind.annotation.ExceptionHandler;<br>import org.springframework.web.bind.annotation.RestControllerAdvice;<br>import org.springframework.web.util.NestedServletException;<br><br>@RestControllerAdvice<br>public class GlobalExceptionHandler {<br>    private static final Log log = Log.get();<br>    /**<br>     * token获取错误<br>     * @param e token错误<br>     * @return Result<br>     */<br>    @ExceptionHandler(NotLoginException.class)<br>    public Result&lt;?&gt; notLoginHandler(NotLoginException e) {<br>        log.error("Sa-token登陆异常:{}",e.getMessage());<br>        return Result.error(Constants.CODE_401,e.getMessage());<br>    }<br><br>    @ExceptionHandler(ServiceException.class)<br>    public Result&lt;?&gt; serviceException(ServiceException e) {<br>        log.error("自定义异常:{}",e.getMessage());<br>        return Result.error(Constants.CODE_600,e.getMessage());<br>    }<br><br>}<br>

因为之前已经配置了 saToken 的登陆验证,如果 StpUtil.checkLogin() 如果登陆未通过,会抛出 NotLoginException 异常,所以在这里也需要捕捉一下这个异常 统一返回给前端


p8 生成swagger接口文档

maven依赖如下:

&lt;!-- swagger2  --&gt;<br>&lt;dependency&gt;<br>    &lt;groupId&gt;io.springfox&lt;/groupId&gt;<br>    &lt;artifactId&gt;springfox-swagger2&lt;/artifactId&gt;<br>    &lt;version&gt;2.8.0&lt;/version&gt;<br>&lt;/dependency&gt;<br>&lt;dependency&gt;<br>    &lt;groupId&gt;io.springfox&lt;/groupId&gt;<br>    &lt;artifactId&gt;springfox-swagger-ui&lt;/artifactId&gt;<br>    &lt;version&gt;2.8.0&lt;/version&gt;<br>&lt;/dependency&gt;<br>&lt;!-- 引入swagger-bootstrap-ui包 --&gt;<br>&lt;dependency&gt;<br>    &lt;groupId&gt;com.github.xiaoymin&lt;/groupId&gt;<br>    &lt;artifactId&gt;swagger-bootstrap-ui&lt;/artifactId&gt;<br>    &lt;version&gt;1.8.5&lt;/version&gt;<br>&lt;/dependency&gt;

引入依赖后在如下位置新建一个 SwaggerConfig

图片

package com.wg.config;<br><br>import com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrapUI;<br>import io.swagger.annotations.Api;<br>import io.swagger.annotations.ApiOperation;<br>import org.springframework.context.annotation.Bean;<br>import org.springframework.context.annotation.Configuration;<br>import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;<br>import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;<br>import springfox.documentation.builders.ApiInfoBuilder;<br>import springfox.documentation.builders.PathSelectors;<br>import springfox.documentation.builders.RequestHandlerSelectors;<br>import springfox.documentation.service.ApiInfo;<br>import springfox.documentation.service.Contact;<br>import springfox.documentation.spi.DocumentationType;<br>import springfox.documentation.spring.web.plugins.Docket;<br>import springfox.documentation.swagger2.annotations.EnableSwagger2;<br><br>@EnableSwagger2<br>@Configuration<br>public class SwaggerConfig {<br>    @Bean<br>    public Docket createRestApi() {<br>        //http://ip地址:端口/项目名/swagger-ui.html#/<br>        ApiInfo apiInfo = new ApiInfoBuilder()<br>                .title("wg-springBoot") //网站标题<br>                .description("WG RESTFUL API......") //网站描述<br>                .version("1.0") //版本<br>                .contact(new Contact("WG","","2805487767@qq.com")) //联系人<br>                .license("The Apache License") //协议<br>                .licenseUrl("http://www.baidu.com") //协议url<br>                .build();<br>        return new Docket(DocumentationType.SWAGGER_2) //swagger版本<br>                .pathMapping("/")<br>                .select()<br>                //扫描那些controller<br>                .apis(RequestHandlerSelectors.basePackage("com.wg.controller"))<br>                .paths(PathSelectors.any())<br>                .build()<br>                .apiInfo(apiInfo);<br>    }<br>}<br>

p9 JSR303参数校验

引入依赖

  &lt;!--参数校验Valid--&gt;<br>  &lt;dependency&gt;<br>      &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;<br>      &lt;artifactId&gt;spring-boot-starter-validation&lt;/artifactId&gt;<br>  &lt;/dependency&gt;

当参数校验不通过后会抛出异常, 所以我们需要在 全局异常捕捉一下 并且统一返回给前端

图片

找到这个类,把如下代码放进去

 /**<br>     * 参数校验全局异常捕捉<br>     * @param e<br>     * @return<br>     */<br>    @ExceptionHandler(value = MethodArgumentNotValidException.class)<br>    public Result&lt;?&gt; handleValidException(MethodArgumentNotValidException e){<br>        log.error("数据校验出现问题:{},异常类型:{}",e.getMessage(),e.getClass());<br>        BindingResult bindingResult = e.getBindingResult();<br>        return Result.error(Constants.CODE_400, bindingResult.getFieldErrors().get(0).getDefaultMessage());<br>    }

p10 统一包装类

在前后端进行接口数据交互的时候,基本上会要求后台统一返回数据格式

{<br>  "code": "200",<br>  "message": "success",<br>  "data": "具体数据"<br>}

像这样格式的数据该怎样统一返回给前端呢??其实很简单 我们只需要写一个统一包装类就可以了

package com.wg.common;<br><br>import lombok.Data;<br><br>@Data<br>public class Result&lt;T&gt; {<br>    private String code;<br>    private String message;<br>    private T data;<br><br>    public Result(String code,String message) {<br>        this.code = code;<br>        this.message = message;<br>    }<br><br>    public Result(String code,String message,T data) {<br>        this.code = code;<br>        this.message = message;<br>        this.data = data;<br>    }<br>    // 请求成功无数据返回<br>    public static &lt;T&gt; Result&lt;T&gt; success() {<br>        return new Result&lt;T&gt;(Constants.CODE_200, "success");<br>    }<br>    // 请求成功有数据返回<br>    public static &lt;T&gt; Result&lt;T&gt; success(T data) {<br>        return new Result&lt;T&gt;(Constants.CODE_200, "success",data);<br>    }<br>    // 请求失败<br>    public static &lt;T&gt; Result&lt;T&gt; error() {<br>        return new Result&lt;T&gt;(Constants.CODE_500, "系统异常");<br>    }<br>    // 请求失败 自定义提示<br>    public static &lt;T&gt; Result&lt;T&gt; error(String message) {<br>        return new Result&lt;T&gt;(Constants.CODE_500, message);<br>    }<br>    // 请求失败 自定义提示和状态码<br>    public static &lt;T&gt; Result&lt;T&gt; error(String code, String message) {<br>        return new Result&lt;T&gt;(code, message);<br>    }<br>}<br>

当然, 光有包装类也不是很严谨, 所以我们需要再定义一个 状态码的接口类:

public interface Constants {<br><br>    String CODE_200 = "200"; //成功<br>    String CODE_401 = "401";  // 权限不足<br>    String CODE_400 = "400";  // 参数错误<br>    String CODE_500 = "500"; // 系统错误<br>    String CODE_600 = "600"; // 其他业务异常<br><br>}

这些状态就是表示咱们业务处理的时候所定义的一些 编码, 这样规定好了以后 在前端就可以做一些处理


业务代码请参照源码及视频讲解