当前位置: 首页 > news >正文

尚硅谷的尚融宝项目

先建立一个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 {@Resourceprivate 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,"成功");//枚举成员之间用逗号//枚举类型,没办法用DATAprivate 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,"服务器内部问题");//枚举成员之间用逗号//枚举类型,没办法用DATAprivate 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 {@Resourceprivate IntegralGradeService integralGradeService;@Resourceprivate 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.lryc.cn/news/1526.html

相关文章:

  • 12 Day:内存管理
  • linux基本功系列之lsof命令实战
  • 基础篇:02-SpringCloud概述
  • 【软件测试】软件测试工作上95%会遇到的问题,你遇到多少?
  • 4.5.4 LinkedList
  • Python之FileNotFoundError: [Errno 2] No such file or directory问题处理
  • C语言中耳熟能详的printf与scanf
  • 【数据结构】复杂度讲解
  • JAVA-线程池技术
  • 【C++】从0到1入门C++编程学习笔记 - 提高编程篇:STL常用算法(算术生成算法)
  • 【C++】static成员
  • Python Scrapy 爬虫简单教程
  • 【DOCKER】容器概念基础
  • 第九层(16):STL终章——常用集合算法
  • 一起学习用Verilog在FPGA上实现CNN----(六)SoftMax层设计
  • pixhawk2.4.8-APM固件-MP地面站配置过程记录
  • 【unity细节】关于资源商店(Package Maneger)无法下载资源问题的解决
  • [Arxiv 2022] A Novel Plug-in Module for Fine-Grained Visual Classification
  • RocketMQ Broker消息处理流程及部分源码解析
  • Java面试题:Java集合框架
  • 时间之间的比较与计算相差年、月、日、小时、分钟、毫秒、纳秒以及判断闰年--LocalDateTime
  • PyTorch学习笔记:nn.L1Loss——L1损失
  • Java程序设计-ssm企业财务管理系统设计与实现
  • 疑难杂症篇(二十一)--Ubuntu18.04安装usb-cam过程出现的问题
  • npm-npm i XX --save 和--save-dev
  • 可重构或可调谐微波滤波器技术
  • 医院智能化解决方案-门(急)诊、医技、智能化项目解决方案
  • 判断元素是否在可视区域
  • 告别传统繁杂的采购合同管理 打造企业自动化采购管理模式
  • 【prism】路由事件映射到Command命令