SpringBoot以及swagger的基本使用

1、SpringBoot是什么?

一种快速开发、启动Spring的框架、脚手架

遵循“约定优于配置”的思想,使得能够快速创建和配置Spring应用


2、SpringBoot的核心特性

  1. 自动配置,一些依赖、默认配置都预设好了,减少了配置量
  2. 起步依赖,SpringBoot预设了一些没有依赖冲突的依赖,可以直接引用
  3. 内嵌服务器,SpringBoot将Tomcat、JBOSS等服务器内嵌了,直接以jar包的形式启动
  4. 还有监控、健康检查等功能

3、创建SpringBoot项目

创建maven工程,继承自spring-boot-starter-parent

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.6</version>
</parent>

添加SpringMVC和Mybtis的依赖

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version>
</dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope>
</dependency>

创建启动类SpringbootSpringbootApplication.java

@SpringBootApplication
public class SpringbootSpringbootApplication {public static void main(String[] args) {SpringApplication.run(SpringbootSpringbootApplication.class, args);}}

创建配置文件application.properties/application.yml/application.yaml

文件名必须是application,如果是相同的配置内容,优先级properties > yaml/yml

server:port: 8888#可以自定义内容
user:userList: [ 'user1', 'user2', 'user3' ]passwords:- '123456'- '000000'

启动测试(运行启动类的main方法)

image-20240715165244971


4、YAML配置文件

YAML配置文件相对于properties配置/xml配置文件文件,可阅读性更高、更加简洁

4.1、语法格式

# 基本都是key: value的格式
key: valuekey: key1: value1key2: value2

配置map数据/对象数据

key: key1: value1key2: value2

配置list/set数据

key: [value1, value2, value3...]
#---------------------------------
key: - value1- value2- value3........

4.2 、在线查找SpringBoot的配置文件

https://docs.spring.io/spring-boot/docs/2.7.6/reference/htmlsingle/#common-application-properties

4.3 、配置文件与属性的映射

4.3.1、使用@Value注解

配置文件如下

user:username: 'zhangsan'age: 18friendList: [ 'user1', 'user2', 'user3' ]

实体类

@RestController
@RequestMapping("/my")
public class UserController {@Value("${user.username}")private String username;@Value("${user.age}")private Integer age;@Value("${user.friendList:user1, user2, user3}")private List<User> friends;@RequestMappingpublic String get() {return username + age + friends.toString();}
}

4.3.2、 使用@ConfigurationProperties注解

使用@ConfigurationProperties注解,必须作用在类上面,并添加prefix=key,其次还必须为字段设置set方法,才能实现自动装配,否则启动失败

配置文件

user:username: 'zhangsan'age: 18

实体类

@ConfigurationProperties(prefix = "user")
@RestController
@RequestMapping("/my")
public class UserController {private String username;private Integer age;@RequestMappingpublic String get() {return username + age;}public void setUsername(String username) {this.username = username;}public void setAge(Integer age) {this.age = age;}}

5、 SpringBoot与Mybatis集成

5.1、 配置数据源和Mybatis

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/ssm?serverTimezone=Asia/Shanghaiusername: rootpassword: root
mybatis:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpltype-aliases-package: cn.cnmd.spring.springbootspringboot.pojomapper-locations: classpath:mapper/*Mapper.xml

5.2、 编写mapper接口UserMapper

@Mapper
public interface UserMapper {List<User> getUsers();
}

5.3、 编写mapper.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.cnmd.spring.springbootspringboot.mapper.UserMapper"><select id="getUsers" resultType="user">select username,name,password,avatar as avatarIconfrom user;</select></mapper>

5.4、 调用接口

@GetMapping("/users")
public List<User> getUsers() {List<User> users = userMapper.getUsers();return users;
}

6、 SpringBoot与JUnit集成

6.1、 导入依赖spring-boot-starter-test

<!--测试的起步依赖-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>

6.2、 编写测试案例

导入的JUnit必须是来自 org.junit.jupiter.api.Test

测试类中不能使用public修饰,否则会初始化报错,但是可以进行测试

import cn.cnmd.spring.springbootspringboot.mapper.UserMapper;
import cn.cnmd.spring.springbootspringboot.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.List;@SpringBootTest
class SpringbootSpringbootApplicationTests {@Autowiredprivate UserMapper userMapper;@Testpublic void getUsers() {List<User> users = userMapper.getUsers();System.out.println(users);}}

7、 制作starter

7.1、 创建maven的quickstart工程

创建一个普通的java工程

7.2、 导入依赖

spring-boot-starter => springboot启动器

spring-boot-autoconfigure => springboot自动配置

spring-boot-configuration-processor => springboot处理元数据

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>2.5.6</version>
</dependency>
<!--自动装配的包-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId><version>2.5.6</version>
</dependency>
<!--支持元数据配置的包-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><version>2.5.6</version>
</dependency>

7.3、 编写提供服务的类、服务的属性配置类、服务的自动装配类

Xxxservice、XxxAutoConfigure、XxxProperties

7.3.1、XxxService.java

public class XxxService{XxxSevice(Xxxproperties properties){.....构造方法......}.......具体实现功能......
}

7.3.2、XxxProperties.java

@ConfigurationProperties(prefix = "key") //这里指定的是application.yaml文件中配置的key
public class Xxxproperties{//设置属性,可以添加注释和默认值//这里的属性是需要在application.yaml文件中配置的属性,并且需要为每个属性添加get方法private String p1 = "12345";private int p2 = 123;public String getP1(){return this.p1;}public int getP2(){return this.p2;}}

7.3.3、XxxAutoConfigure.java

注意:当@Bean修饰的方法带有参数时,在IOC容器中必须存在对应的Bean对象

​ 比如xxxService方法有一个Xxxproperties类型的参数,那么在IOC容器中就必须存在XxxProperties这个Bean对象

​ 这里因为指定了@EnableConfigurationProperties(XxxProperties.class),就已经添加了XxxProperties这个Bean到IOC容器

@Configuration //指定这个自动配置类为配置类
@EnableConfigurationProperties(XxxProperties.class) //开启配置属性,添加对应的Xxxproperties.class
@ConditionalOnClass(XxxService.class) //保证在类路径下存在XxxService类
public class XxxAutoConfigure{@Bean@ConditionalOnMissingBean(XxxService.class) //这个注解在IOC容器中不存在这个Bean时执行下面的方法创建Bean并放入IOC容器中public XxxService xxxService(Xxxproperties properties) throws Exception{return new XxxService(properties);}
}

7.4、创建spring.factories配置文件

在resources文件夹下新建一个META-INF文件夹,然后在这个文件夹下新建spring.factories文件,这个文件就是自动装配的配置文件

文件名必须是spring.factories, 只需要指定这一个属性为自动配置类的全限定名就可以了

org.springframework.boot.autoconfigure.EnableAutoConfiguration=xx.xx.xxx.XxxAutoConfigure

7.5、将项目下载为jar包

使用maven的install下载为jar包

7.6、引用测试

首先在需要引入的地方使用

@Autowired
private XxxService service;

其次在application.yaml中配置在XxxProperties中定义的属性

key: p1: "xxxxxxx"p2: 123456

之后就能调用XxxService中定义的方法了

8、 Swagger的使用

个人不喜欢使用,不推荐

因为swagger这个东西有版本问题,只能降低springboot版本才能使用

ps:SpringBoot 2.7.6 版本与 springfox-boot-starter 3.0.0 / springfox-boot-starter 2.9.0 都不兼容

本人使用的是Apifox,只需要将接口导出为在线文档或者HTML,和Swagger自动导出的结果一致,用法也大差不差

8.1、 导入依赖

<!--亲测 springboot2.4.2 和 springboot2.3.1.RELEASE 版本可以与 这个启动器兼容-->
<dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version>
</dependency>

8.2、 常用注解

只需要下面两个就够用了,否则加上其他注解,注解内容就显得比代码还要多

@Api => 这个注解作用在一个controller上,value属性代表controller的描述

@ApiOption => 这个注解作用在一个@XxxMapping注解的方法上,value属性代表接口的具体描述

除了注解之外,还需要添加一个配置类

SwaggerConfig.java

@Configuration
@EnableSwagger2
public class SwaggerConfig {@Beanpublic Docket api() {// Docket类就是Swagger提供的一个与Spring MVC集成的配置类return new Docket(DocumentationType.SWAGGER_2) // 文档类型设置为SWAGGER2.select() // 选择当前文档类型进行构建.apis(RequestHandlerSelectors.basePackage("cn.cnmd.spring.springbootspringboot.controller")) // 请求控制器包.paths(PathSelectors.any())// 为任意请求构建API文档.build() // 构建API.apiInfo(apiInfo()); // 设置AIP文档的信息}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("测试项目接口文档").description("测试项目接口测试").version("1.0.0").termsOfServiceUrl("") // 服务条款地址.license("") // 许可证.licenseUrl("") // 许可证URL.build();}
}

8.3、 访问地址

启动服务之后访问

swagger 2.x版本访问localhost:8080/swagger-ui.html

swagger 3.x版本访问localhost:8080/swagger-ui/index.html

就可以看到接口文档

接口文档中可以使用 Try it out 进行在线的接口请求,服务器会返回结果并展示到Responses区域

image-20240715192808951

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

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

相关文章

表格竖向展示

最近在做手机端web页面&#xff0c;页面中需要有个表格来显示数据&#xff0c;但是由于数据太多页面太窄&#xff0c;table展示横向滑动的话感觉很丑。所以让表格竖向显示了 具体页面如下: 实现代码&#xff1a;当然代码里面绑定的数据啊什么的你都可以修改为自己的内容&#…

Vue.js:如何区分页面关闭和刷新?深入解析与实战

Vue.js&#xff1a;如何区分页面关闭和刷新&#xff1f;深入解析与实战 在开发基于Vue.js的单页应用&#xff08;SPA&#xff09;时&#xff0c;我们经常需要处理用户关闭浏览器标签页或刷新页面的情况。虽然这两种操作看似相似&#xff0c;但在某些业务场景中&#xff0c;我们…

linux系统和windows系统如何同步时间,服务器时间变动怎么同步

一、Linux系统时间同步 1. 使用NTP&#xff08;网络时间协议&#xff09; NTP是最常用的Linux系统时间同步方式。NTP通过连接到外部时间服务器&#xff08;如原子钟或GPS接收器&#xff09;来获取高精度的时间信息&#xff0c;并校准本地系统时间。 步骤&#xff1a; 安装N…

vue路由的钩子函数

在Vue.js中&#xff0c;当使用Vue Router进行页面路由管理时&#xff0c;你可以利用路由守卫&#xff08;Route Guards&#xff09;来实现路由的钩子函数。这些钩子函数允许你在路由发生变化时执行一些代码&#xff0c;比如权限验证、页面加载前的数据预获取等。Vue Router 提供…

【文献阅读】Social Bot Detection Based on Window Strategy

Abstract 机器人发帖的目的是在不同时期宣传不同的内容&#xff0c;其发帖经常会出现异常的兴趣变化、而人类发帖的目的是表达兴趣爱好和日常生活&#xff0c;其兴趣变化相对稳定。提出了一种基于窗口策略&#xff08;BotWindow Strategy&#xff09;的社交机器人检测模型基于…

【fastadmin】selectpickers多选提交后数据库只保存了一个选择值

问题描述 在 fastadmin 框架开发项目中&#xff0c;用到了selectpickers多选组件。 例如&#xff1a;选择了两位员工&#xff0c;但是提交后数据库只保存了一个选择值。 <div class"form-group"><label class"control-label col-xs-12 col-sm-2"…

网络同步学习(状态同步,帧同步)

参考&#xff1a;【网络同步】浅析帧同步和状态同步 - 知乎 (zhihu.com) 网络同步 实时的多端数据同步 实时的多端表现 帧同步&#xff08;LockStep&#xff09; 基本原理 帧同步的战斗逻辑在客户端在帧同步下&#xff0c;服务端只转发操作&#xff0c;不做任何逻辑处理。…

Puppeteer动态代理实战:提升数据抓取效率

引言 Puppeteer是由Google Chrome团队开发的一个Node.js库&#xff0c;用于控制Chrome或Chromium浏览器。它提供了高级API&#xff0c;可以进行网页自动化操作&#xff0c;包括导航、屏幕截图、生成PDF、捕获网络活动等。在本文中&#xff0c;我们将重点介绍如何使用Puppeteer…

【深度学习】InternVL2-8B,图转文,docker部署

文章目录 基础fastapi服务请求fastapi接口 基础 https://huggingface.co/OpenGVLab/InternVL2-8B#%E7%AE%80%E4%BB%8B InternVL2-26B应该更好&#xff0c;但显存没那么大&#xff0c;只能跑InternVL2-8B了。 下载&#xff1a; cd /ssd/xiedong/InternVL2-26B git clone htt…

spring boot 实现token验证登陆状态

1、添加maven依赖到pom.xml <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.11.5</version></dependency><dependency><groupId>io.jsonwebtoken</groupId>…

unity3d脚本使用start,updata,awake

最近学了一下unity&#xff0c;脚本编写用的c#&#xff0c;虽说没学过c#但是勉强根据教学还能写点代码。 在这里我来记录一下在我学习过程中感觉最重要的东西 消息函数&#xff1a; 在我们创建一个脚本文件的时候&#xff0c;我们首先可以看到两个默认给你写出来的函数。 这两…

Promise的自定义封装(用类方法)

深入理解promise底层源码有助于我们更好地理解promise。以下代码可以实现promise的基本功能。 class Promise{// 构造方法constructor(executor){// 添加属性this.PromiseState "pending";this.PromiseResult null;this.callbacks [];// 保存实例对象this的值co…

爬虫-存储数据

EXCEL文件 openpyxl写文件 exce文件也被称为工作簿&#xff0c;其可以创建多个工作表。每个工作表是由很多个单元格组成。我们通过openpyxl来操作Excel文件。 安装 pip install openpyxl 要将内容写入Excel文件&#xff0c;首先要创建一个Excel表格&#xff0c;方法如下&…

c++图的基本操作

在C中&#xff0c;可以使用邻接矩阵或邻接表来表示图&#xff0c;并实现一系列基本的图操作&#xff0c;包括创建图、添加边、删除边、遍历图等。下面是关于图的基本操作的详细解释。 创建图&#xff1a; 使用邻接矩阵创建图&#xff1a;可以使用二维数组来表示邻接矩阵&#x…

RAG技术-为自然语言处理注入新动力

引言&#xff1a; 在自然语言处理&#xff08;NLP&#xff09;的领域中&#xff0c;RAG&#xff08;Retrieval-Augmented Generation&#xff09;技术以其独特的方式&#xff0c;正在改变我们与机器的交互方式。RAG技术结合了大语言模型的强大能力&#xff0c;使得机器在理解和…

MongoDB教程(九):java集成mongoDB

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、环境准…

SAPUI5基础知识15 - 理解控件的本质

1. 背景 经过一系列的练习&#xff0c;通过不同的SAPUI5控件&#xff0c;我们完成了对应用程序界面的初步设计&#xff0c;在本篇博客中&#xff0c;让我们一起总结下SAPUI5控件的相关知识点&#xff0c;更深入地理解SAPUI5控件的本质。 通常而言&#xff0c;一个典型UI5应用…

RocketMQ单结点安装/Dashboard安装

目录 1.安装NameServer 2.安装Broker 3.使用自带工具测试数据发送 4.使用DashBoard进行查看 5.关闭相关设备 前置条件&#xff1a;两台虚拟机CentOS Linux release 7.5.1804(ps:当然也可以都部署在一台机器上) RocketMq属于天生集群。需要同时启动nameServer和Broker进行…

go练习:图像

自定义 Image 类型&#xff0c;实现必要的方法并调用 pic.ShowImage。 Bounds 应当返回一个 image.Rectangle &#xff0c;例如 image.Rect(0, 0, w, h)。 ColorModel 应当返回 color.RGBAModel。 At 应当返回一个颜色。上一个图片生成器的值 v 对应于此次的 color.RGBA{v, …

CMMI认证是什么?做CMMI认证的必要条件?CMMI认证的重要性

CMMI&#xff08;Capability Maturity Model Integration&#xff09;认证&#xff0c;作为企业追求卓越软件工程实践的标志&#xff0c;其实现过程既严谨又复杂。首先&#xff0c;我们需要深入理解CMMI的核心理念&#xff0c;即持续的过程改进和成熟度提升。 为了实现CMMI认证…