尚硅谷的尚融宝项目

news2024/11/27 9:52:36

先建立一个Maven

springboot项目

进来先把src删掉,因为是一个父项目,我们删掉src之后,pom里配置的东西,也能给别的模块使用。
在这里插入图片描述
改一下springboot的版本号码

加入依赖和依赖管理:

<properties>
    <java.version>1.8</java.version>
    <spring-cloud-alibaba.version>2.2.2.RELEASE</spring-cloud-alibaba.version>
    <spring-cloud.version>Hoxton.SR8</spring-cloud.version>
    <mybatis-plus.version>3.4.1</mybatis-plus.version>
    <velocity.version>2.0</velocity.version>
    <swagger.version>2.9.2</swagger.version>
    <swagger-bootstrap-ui.version>1.9.2</swagger-bootstrap-ui.version>
    <commons-lang3.version>3.9</commons-lang3.version>
    <commons-fileupload.version>1.3.1</commons-fileupload.version>
    <commons-io.version>2.6</commons-io.version>
    <alibaba.easyexcel.version>2.1.1</alibaba.easyexcel.version>
    <apache.xmlbeans.version>3.1.0</apache.xmlbeans.version>
    <fastjson.version>1.2.28</fastjson.version>
    <gson.version>2.8.2</gson.version>
    <json.version>20170516</json.version>
    <aliyun-java-sdk-core.version>4.3.3</aliyun-java-sdk-core.version>
    <aliyun-sdk-oss.version>3.10.2</aliyun-sdk-oss.version>
    <jodatime.version>2.10.1</jodatime.version>
    <jwt.version>0.7.0</jwt.version>
    <httpclient.version>4.5.1</httpclient.version>
</properties>
<dependencyManagement>
    <dependencies>
        <!--Spring Cloud-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

        <!--Spring Cloud Alibaba-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>${spring-cloud-alibaba.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>
        <!--mybatis-plus 代码生成器-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>
        <!-- Mybatis Plus 代码生成器模板引擎,  -->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>${velocity.version}</version>
        </dependency>

        <!--swagger-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>${swagger.version}</version>
        </dependency>
        <!--swagger ui-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>${swagger.version}</version>
        </dependency>
        <!--swagger-bootstrap-ui-->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>${swagger-bootstrap-ui.version}</version>
        </dependency>

        <!--commons-lang3-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${commons-lang3.version}</version>
        </dependency>

        <!--文件上传-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>${commons-fileupload.version}</version>
        </dependency>

        <!--commons-io-->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>${commons-io.version}</version>
        </dependency>

        <!--excel解析-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>${alibaba.easyexcel.version}</version>
        </dependency>
        <!--excel解析依赖-->
        <dependency>
            <groupId>org.apache.xmlbeans</groupId>
            <artifactId>xmlbeans</artifactId>
            <version>${apache.xmlbeans.version}</version>
        </dependency>

        <!--json-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>${fastjson.version}</version>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>${json.version}</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>${gson.version}</version>
        </dependency>

        <!--阿里云SDK远程调用-->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>${aliyun-java-sdk-core.version}</version>
        </dependency>

        <!--阿里云文件管理-->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>${aliyun-sdk-oss.version}</version>
        </dependency>

        <!--日期时间工具-->
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>${jodatime.version}</version>
        </dependency>

        <!--jwt工具-->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>${jwt.version}</version>
        </dependency>

        <!--httpclient-->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>${httpclient.version}</version>
        </dependency>
        
        
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

创建硅谷comment

创建一个工具模块。

创建一个Maven项目就ok了

是个WEB项目,guigu-common的pom里,需要加上web依赖

<dependencies>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!--lombok用来简化实体类:需要安装lombok插件-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
</dependencies>

创建模块service-base

1、创建Maven模块
在srb下创建普通maven模块
Group:com.atguigu
Artifact:service-base

在service-base里面引入依赖
引入独立的依赖在这里插入图片描述

service-core

在srb下创建普通maven模块
Group:com.atguigu
Artifact:service-core

依赖

<dependencies>

    <dependency>
        <groupId>com.atguigu</groupId>
        <artifactId>service-base</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>

    <!--mysql-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <!--mybatis-plus-->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
    </dependency>
    <!--mybatis-plus 代码生成器-->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-generator</artifactId>
    </dependency>
    <!-- Mybatis Plus 代码生成器模板引擎,  -->
    <dependency>
        <groupId>org.apache.velocity</groupId>
        <artifactId>velocity-engine-core</artifactId>
    </dependency>
</dependencies>

积分接口在这里插入图片描述

积分等级表
控制管理員登錄的controller
在这里插入图片描述


@CrossOrigin   //检查跨域
@RestController
@RequestMapping("/admin/core/integralGrade")
public class AdminIntegralGradeController {

    @Resource
    private IntegralGradeService integralGradeService;

    @GetMapping("/list")
    public List<IntegralGrade> listAll(){
        return integralGradeService.list();
    }

}

檢查好跨域和注解
启动起来访问一下试试
在这里插入图片描述

在这里插入代码片

为了使用方便,统一给数据定义一个返回值

{
  "code": 数字, //业务响应码
  "message": 字符串, //返回消息
  "data": 对象 //返回数据
}

使用枚举的方式实现这一点。
在这里插入图片描述

在这个下面定义
在这里插入图片描述
注意包名字要能被掃描進入

package com.atguigu.srb;


//枚举


import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.ToString;

@Getter
@AllArgsConstructor
@ToString
public enum ResponseEnum {


    SUCCESS(-1,"成功"),
    ERROR(0,"成功");
    //枚举成员之间用逗号

    //枚举类型,没办法用DATA
    private Integer code;
    private String message;//枚举中的变量




}

先弄个枚举,用来代表特定值。

然后设置R值,我们返回给前端的东西通通通过R值进行返回。

package com.atguigu.srb;


import lombok.Data;

import java.util.HashMap;
import java.util.Map;

@Data
public class R {

    //的三个部分中,有一个是一个对象比较好
    private Integer code;
    private String message;
    private Map<String,Object> data = new HashMap<>();




    private R(){}


    //表示返回成功
    public static R ok(){
        R r = new R();
        r.setCode(ResponseEnum.SUCCESS.getCode());
        r.setMessage(ResponseEnum.SUCCESS.getMessage());

        return r;

    }

    //表示返回失败
    public static R error(){
        R r = new R();
        r.setCode(ResponseEnum.ERROR.getCode());
        r.setMessage(ResponseEnum.ERROR.getMessage());

        return r;

    }

    //表示返回别的可能
    //传递一个别的参数进来
    public static R setResult(ResponseEnum responseEnum){

        //参数是枚举类型的
        R r = new R();
        r.setCode(responseEnum.getCode());
        r.setMessage(responseEnum.getMessage());

        return r;

    }





}

R的对象用MAP,毕竟灵活一些。

package com.atguigu.srb;


//枚举


import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.ToString;

@Getter
@AllArgsConstructor
@ToString
public enum ResponseEnum {


    SUCCESS(-1,"成功"),
    ERROR(0,"服务器内部问题");
    //枚举成员之间用逗号

    //枚举类型,没办法用DATA
    private Integer code;
    private String message;//枚举中的变量




}

先用枚举定义一些特殊数据如何处理

然后用R来定义返回状态

返回状态中
返回码和message都是可以通过枚举,定义的,然后如果我们返回成功了,那么就要设置个ok函数,方便调用,ok函数,实际上,就是讲枚举中的成功码注入进去了,改变了code和message值

如果返回失败了,就要返回给error函数,同理,然后我们再写一个注入R的数据值。

package com.atguigu.srb;


import lombok.Data;

import java.util.HashMap;
import java.util.Map;

@Data
public class R {

    //的三个部分中,有一个是一个对象比较好
    private Integer code;
    private String message;
    private Map<String,Object> data = new HashMap<>();




    private R(){}


    //表示返回成功
    public static R ok(){
        //r一旦调用这个函数,就说明内部的三个值被设置好了
        R r = new R();
        r.setCode(ResponseEnum.SUCCESS.getCode());
        r.setMessage(ResponseEnum.SUCCESS.getMessage());

        return r;

    }

    //表示返回失败
    public static R error(){
        R r = new R();
        r.setCode(ResponseEnum.ERROR.getCode());
        r.setMessage(ResponseEnum.ERROR.getMessage());

        return r;

    }

    //表示返回别的可能
    //传递一个别的参数进来
    public static R setResult(ResponseEnum responseEnum){

        //参数是枚举类型的
        R r = new R();
        r.setCode(responseEnum.getCode());
        r.setMessage(responseEnum.getMessage());

        return r;

    }

    public R data(String name,Object value){

        //往R里装数据,将R的data通过这个函数装上数据,然后返回回去
        this.data.put(name,value);
        return this;
    }






}

后面应用的时候,所有函数,必须返回的是R值

package com.atguigu.srb.core.controller.admin;


import com.atguigu.srb.R;
import com.atguigu.srb.core.pojo.entity.IntegralGrade;
import com.atguigu.srb.core.service.IntegralGradeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * <p>
 * 积分等级表 前端控制器
 * </p>
 *
 * @author Helen
 * @since 2023-02-08
 */


@Api(tags = "积分等级管理")
@CrossOrigin   //检查跨域
@RestController
@RequestMapping("/admin/core/integralGrade")
public class AdminIntegralGradeController {

    @Resource
    private IntegralGradeService integralGradeService;

    @Resource
    private R r;
    //把r注入进来也行

    @GetMapping("/list")
    public R listAll(){


        List<IntegralGrade> list = integralGradeService.list();

        //将数据交给R进行返回
        //先进行判空操作
        if(list != null ){
            r.ok().data("list",list);//之所以前面都是静态的,是为了不创建对象,不产生耦合
            //ok返回的都是r对象也是为了能串联到一起去,形成一个串
        }

        return  r;
    }





    //代表从浏览器给个数据
    @ApiOperation(value = "根据id删除")
    @DeleteMapping("/remove/{id}")
    public boolean removeById(@PathVariable Long id){

        return integralGradeService.removeById(id);


    }

}


简单来说,就是将结果直接包装成R样子,然后R的ok和error直接调用R的函数,就不要包装饿了。

异常切面

在主要业务之外,统一管理异常
在这里插入图片描述
加上注解之后,所有异常都过来了
增加扫描范围

在这里插入图片描述

package com.atguigu.srb.exception;


import com.atguigu.srb.result.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;


@Slf4j
@RestControllerAdvice
public class HandlerException {

    @ExceptionHandler(value = Exception.class)
    public R handleException(Exception e){
        log.error(e.getMessage(),e);
        return R.error(); 

    }




}

捕捉特殊异常

    //专门特意捕获这个异常
    @ExceptionHandler(BadSqlGrammarException.class)
    public R handleBadSqlGrammarException(BadSqlGrammarException e){
        log.error(e.getMessage(), e);

                                        //这个是我们在result的枚举里添加的异常
        return R.setResult(ResponseEnum.BAD_SQL_GRAMMAR_ERROR);
    }

在这里插入图片描述

自定義異常

必须是运行时异常,而且我们要继承运行时异常

自己定义一个异常,我们可以可以随时把这个异常抛出去,中断交易

在这里插入图片描述
我們在交易中出現問題,可以直接把異常跑出去,中斷掉程序在这里插入图片描述

我们自己定义了个异常类:
一定要继承运行时异常方法
在这里插入图片描述
別忘記設計捕獲
在这里插入图片描述

controller

controller上层异常

在这里插入图片描述

批量處理,直接複製就行

/**
     * Controller上一层相关异常
     */
@ExceptionHandler({
    NoHandlerFoundException.class,
    HttpRequestMethodNotSupportedException.class,
    HttpMediaTypeNotSupportedException.class,
    MissingPathVariableException.class,
    MissingServletRequestParameterException.class,
    TypeMismatchException.class,
    HttpMessageNotReadableException.class,
    HttpMessageNotWritableException.class,
    MethodArgumentNotValidException.class,
    HttpMediaTypeNotAcceptableException.class,
    ServletRequestBindingException.class,
    ConversionNotSupportedException.class,
    MissingServletRequestPartException.class,
    AsyncRequestTimeoutException.class
        })
public R handleServletException(Exception e) {
    log.error(e.getMessage(), e);
    //SERVLET_ERROR(-102, "servlet请求异常"),
    return R.error().message(ResponseEnum.SERVLET_ERROR.getMessage()).code(ResponseEnum.SERVLET_ERROR.getCode());
}

放在這裏在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/336034.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大型智慧校园系统源码 智慧校园源码 Android电子班牌源码

一款针对中小学研发的智慧校园系统源码&#xff0c;智慧学校源码带电子班牌、人脸识别系统。系统有演示&#xff0c;可正常上线运营正版授权。 私信了解更多&#xff01; 技术架构&#xff1a; 后端&#xff1a;Java 框架&#xff1a;springboot 前端页面&#xff1a;vue e…

keepalived+mysql高可用

一.设置mysql同步信息两节点安装msyql略#配置节点11.配置权限允许远程访问mysql -u root -p grant all on *.* to root% identified by Root1212# with grant option; flush privileges;2.修改my.cnf#作为主节点配置(节点1)#作为主节点配置 server-id 1 …

leetcode刷题 | 关于前缀和题型总结1

leetcode刷题 | 关于前缀和题型总结1 文章目录leetcode刷题 | 关于前缀和题型总结1题目链接和为K的子数组连续数组/0 和 1 个数相同的子数组和大于等于 target 的最短子数组/长度最小的子数组路经总和Ⅲ题目链接 560. 和为 K 的子数组 - 力扣&#xff08;LeetCode&#xff09;…

Python-第三天 Python判断语句

Python-第三天 Python判断语句一、 布尔类型和比较运算符1.布尔类型2.比较运算符二、if语句的基本格式1.if 判断语句语法2.案例三、 if else 语句1.语法2.案例四 if elif else语句1.语法五、判断语句的嵌套1.语法六、实战案例一、 布尔类型和比较运算符 1.布尔类型 布尔&…

【学习笔记】Nginx实战

反向代理实战 解压Tomcat两次-Tomcat8081、Tomcat8082两个文件夹Tomcat8081只需要修改http协议端口8081Tomcat8082&#xff1a;&#xff08;三个都需要改&#xff0c;不然只会启动其中一个&#xff09;1.修改server的默认端口2.修改http协议的默认端口3.膝盖默认ajp协议的默认端…

面试题: Redis的数据备份

1 RDBRDB全称为Redis Database Backup file &#xff0c;也被叫做Redis数据快照&#xff0c;简单来说就是将当前的所有数据都记录打哦磁盘中&#xff0c;当redis故障重启时&#xff0c;从磁盘读取快照文件进行数据恢复。连接客户端后&#xff0c;使用save命令进保存&#xff0c…

设置Visual Studio 2022背景图

前言 编写代码时界面舒服&#xff0c;自己喜欢很重要。本篇文章将会介绍VS2022壁纸的一些设置&#xff0c;主题的更改以及如何设计界面。 理想的界面应该是这样的 接下来我们来一步步学习如何将界面设计成这样 一、壁纸插件下载 1.拓展->点击拓展管理 2.右上角搜索backgro…

【shell 编程大全】shell 变量的定义以及使用

shell 变量定义 以及使用从此刻开始跟我一起学习shell 相关知识吧 前情回顾 上一章节【shell 前奏知识】 我们已经学习了很多shell的必备知识&#xff0c;让我们一起来回顾下。 shelll的存放位置如何切换shellshell文件中的注释有哪些查看当前系统的shell类型执行shell的n种方…

ubuntu20.04如何安装nvidia-docker?

文章目录安装步骤导入 NVIDIA GPG 密钥添加 NVIDIA Docker 存储库安装 nvidia-container-toolkit检查nvidia-docker是否安装成功安装步骤 导入 NVIDIA GPG 密钥 curl -s https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -添加 NVIDIA Docker 存储库 dist…

2010-2019年290个地级市经济发展与城市绿化数据

2010-2019年290个地级市经济发展与城市绿化数据 1、时间&#xff1a;2010-2019年 2、来源&#xff1a;城市统计NJ&#xff0c;缺失情况与NJ一致 3、范围&#xff1a;290个地级市 4、指标&#xff1a; 综合经济&#xff1a;地区生产总值、人均地区生产总值、地区生产总值增…

开源的电子邮件客户端Cypht

网友 OOXX 在找好用的 webmail&#xff0c;老苏觉得 Cypht 还不错 什么是 Cypht &#xff1f; Cypht 是一个简单、轻量级和现代的 Webmail 客户端&#xff0c;它将多个帐户聚合到一个界面中。除了电子邮件帐户&#xff0c;它还支持 Atom/RSS 源。 安装 建数据库 数据库直接用…

MySQL数据库03——数据表的创建、修改和删除

接着上一章的内容&#xff0c;第一章安装好了Mysql和对应的编译器workbench&#xff0c;并且简单的创造了一个数据库college&#xff0c;第二章了解了SQL基础的动词和数据类型。这一章我们学习怎么用这些动词&#xff0c;在这个college库里面创建数据表&#xff0c;并且修改删除…

学习周报-2023-0210

文章目录一 在SUSE11sp3系统中将openssh从6升级到8一 需求二 系统环境三 部署流程1.上传编译安装的软件包2.安装 gcc编译软件3.安装依赖zlib4.安装依赖openssl5.安装openssh二 在CentOS-6.9配置apache服务&#xff08;3&#xff09;---虚拟主机配置一 定义二 系统环境三 基于域…

浅解ThreadLocal

我们知道的是synchronized能够解决线程安全中的内存可见性问题&#xff08;让每个线程读取到的变量一致&#xff09;&#xff0c;而ThreadLocal恰好相反&#xff0c;它是让每个线程都有处理任务过程中不同的值。而我们通过代码发现他确实可以实现这样的功能package executor;/*…

chatgpt注册问题解决. You‘ve made too many phone verification requests.

本来想多注册chagpt几个号&#xff0c;发现注册不了了 错误&#xff1a;You’ve made too many phone verification requests. Please try again later or contact us through our help center at help.openai.com. 或者错误&#xff1a;We’ve detected suspicious behavior…

Java数据结构中二叉树的深度解析及常见OJ题

本篇文章讲述Java数据结构中关于二叉树相关知识及常见的二叉树OJ题做法讲解&#xff08;包含非递归遍历二叉树&#xff09; 目录 一、二叉树 1.1二叉树概念 1.2特殊的二叉树 1.3二叉树性质 1.4二叉树基本性质定理题 1.5二叉树遍历基本操作 1.6二叉树遍历的前中后非递归写法 1.7…

聚观早报 | 货拉拉入局跑腿业务;苹果任命首位首席人力资源官

今日要闻&#xff1a;谷歌AI聊天机器人Bard股价大跌7.4%&#xff1b;货拉拉入局跑腿业务&#xff1b;苹果任命首位首席人力资源官&#xff1b;迪士尼宣布裁员 7000 人&#xff1b;家乐福中国 COO 离职 谷歌AI聊天机器人Bard股价大跌 7.4% 2 月 8 日消息&#xff0c;谷歌人工智能…

一篇五分生信临床模型预测文章代码复现——FIgure 9.列线图构建,ROC分析,DCA分析 (四)

之前讲过临床模型预测的专栏,但那只是基础版本,下面我们以自噬相关基因为例子,模仿一篇五分文章,将图和代码复现出来,学会本专栏课程,可以具备发一篇五分左右文章的水平: 本专栏目录如下: Figure 1:差异表达基因及预后基因筛选(图片仅供参考) Figure 2. 生存分析,…

软件使用【SecureCRT】 SSH连接报错Key exchange failed

目录 一、原因分析 二、解决方法 三、修改文件方法 1、修改ssh_config 2、修改sshd_config 3、重新启动服务 SecureCRT连接服务器时报错&#xff0c;报错信息为&#xff1a; Key exchange failed. No compatible key exchange method. The server supports these methods…

轨迹预测算法vectorNet调研报告

前言 传统的行为预测方法是规则的&#xff0c;基于道路结构的约束生成多个行为假设。最近&#xff0c;很多基于学习的预测方法被提出。他们提出了对于不同行为假设的进行概率解释的好处&#xff0c;但是需要重构一个新的表示来编码地图和轨迹信息。有趣的是&#xff0c;虽然高精…