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://xiahunao.cn/news/3248893.html

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

相关文章

实现给Nginx的指定站点开启目录浏览功能

一、问题描述 需要实现在浏览器上可以浏览Nginx部署网站内容并下载一些常用的软件安装包、文件资料等内容;并且针对一些文件夹或内容需要进行认证后才能查看;有一些格式类型的文件也不能够访问查看。 二、问题分析 1、实现浏览器上可以浏览下载文件内容; 2、针对一些文件…

Android Studio 不再支持windows 7

Android Studio 一打开就报错&#xff1a; 无法找到入口 无法定位程序输入点 CreateAppContainerProfle 于动态链接库USERENV.dII 上。 截图如下&#xff1a; 经调查&#xff0c;是因为系统版本不兼容。 我目前的电脑环境&#xff1a;windows 7,但是现在的Android Studio要…

四六级词汇小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;英语词汇管理&#xff0c;易错词管理&#xff0c;学习笔记管理&#xff0c;签到打卡管理&#xff0c;论坛管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;英语词汇&…

【C++】认识C++(一)

前言 &#x1f4da;作者简介&#xff1a;爱编程的小马&#xff0c;是一名大厂后端c程序员。 &#x1f4da;本文收录于c系列&#xff0c;本专栏主要是分享我所了解的c知识&#xff0c;带领大家慢慢从了解c到认识c&#xff0c;持续更新&#xff01; &#x1f4da;本文主要内容&a…

纵向倾斜角、横向倾斜角、全方面监测:输电线路杆塔倾斜在线监测装置

纵向倾斜角、横向倾斜角、全方面监测&#xff1a;输电线路杆塔倾斜在线监测装置 随着我国电网建设的不断加速和电力设施分布范围的扩大&#xff0c;杆塔作为电网的重要组成部分&#xff0c;其安全稳定运行对于保障电力供应具有至关重要的意义。然而&#xff0c;由于地质条件复…

transformer论文讲解

1.标题 作者 Transformer 开创了继 MLP 、CNN和 RN 之后的第四大类模型。200页综述&#xff08;来自评论区&#xff1a; https://arxiv.org/pdf/2108.07258.pdf &#xff09;建议将Transformer作为基础模型。 标题&#xff1a;XXX is all you need. 头条标题。 Attention i…

达梦数据库的系统视图v$sqltext

达梦数据库的系统视图v$sqltext 在达梦数据库&#xff08;DM Database&#xff09;中&#xff0c;V$SQLTEXT 是一个系统视图&#xff0c;用于显示当前正在执行或最近执行的SQL语句的文本信息。这个视图对于监控和分析数据库中的SQL活动非常有用&#xff0c;尤其是在需要调试性…

C语言 | Leetcode C语言题解之第235题二叉搜索树的最近公共祖先

题目&#xff1a; 题解&#xff1a; struct TreeNode* lowestCommonAncestor(struct TreeNode* root, struct TreeNode* p, struct TreeNode* q) {struct TreeNode* ancestor root;while (true) {if (p->val < ancestor->val && q->val < ancestor-&g…

结构体和联合体的区别

1. 结构体(Struct) 在 C 语言中&#xff0c;结构体是一种自定义的复合数据类型&#xff0c;允许将不同数据类型的变量组合成一个单一的实体。结构体可以包含多个成员&#xff0c;每个成员可以是不同的数据类型&#xff0c;如整数、浮点数、字符、数组等。 结构体的定义通常在函…

【接口自动化_12课_基于Flask搭建MockServer】

知识非核心点,面试题较少。框架搭建的过程中的细节才是面试要点 第三方接口,不方便进行测试, 自己要一个接口去进行模拟。去作为我们项目访问模拟接口。自己写一个接口,需要怎样写 一、flask:轻量级的web应用的框架 安装命令 pip install flask 1、flask-web应用 1)…

Blackbox AI:你的智能编程伙伴

目录 Blackbox AI 产品介绍 Blackbox AI 产品使用教程 Blackbox AI体验 AI问答 代码验证 实时搜索 探索&代理 拓展集成 总结 Blackbox AI 产品介绍 Blackbox是专门为程序员量身定制的语言大模型&#xff0c;它针对20多种编程语言进行了特别训练和深度优化&#xff0c;在AI代…

Qt第十二章 样式表

样式表 文章目录 样式表1.样式表盒子模型 2.选择器选择器类型伪状态选择器Pseudo-State 3.控件示例4继承自QWidget的类&#xff0c;设置qss样式表没有效果&#xff0c;需要重写paintEvent 1.样式表 盒子模型 2.选择器 样式表语法&#xff0c;选择器{属性1:值;属性2:值;}如果只…

七款热门企业数据加密软件推荐|2024年加密软件最新整理出炉!

古言到&#xff1a;“知己知彼&#xff0c;百战不殆。” 当今时代&#xff0c;数据为王&#xff01; 企业数据的保护已成为竞争中的关键一环。 数据加密软件作为守护企业数字资产的利剑&#xff0c;其重要性日益凸显。 2024年&#xff0c;市场上涌现出一批功能强大、特色鲜…

Vue入门之v-on、v-model、v-if

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

高效实现GIS地图可视化,这款免费工具不可错过

GIS地图可视化怎么做&#xff1f;山海鲸可视化这款免费可视化工具帮你轻松搞定。从三维GIS地图可视化需求出发&#xff0c;山海鲸可视化提供了强大的GIS场景编辑功能&#xff0c;包括支持添加倾斜摄影和地形编辑。无论是复杂的地形调整还是细致的倾斜摄影添加&#xff0c;这款工…

【C++初阶】模板初阶

【C初阶】模板初阶 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;C&#x1f96d; &#x1f33c;文章目录&#x1f33c; 1. 泛型编程 2. 函数模板 2.1 函数模板的概念 2.2 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.…

【C++修炼之路 第四章】模板 初阶

引入&#xff1a; 我们平时需要调用这样的函数时&#xff0c;往往需要写不同类型的函数用于匹配操作不同类型变量 void Swap(int& a, int& b) {// ... } void Swap(double& a, double& b) {// ... } //......像上面代码中函数重载有一下几个不好的地方&#…

filebeat,kafka,clickhouse,ClickVisual搭建轻量级日志平台

springboot集成链路追踪 springboot版本 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.3</version><relativePath/> <!-- lookup parent from…

Stateflow中的状态转换表

状态转换表是表达顺序模态逻辑的另一种方式。不要在Stateflow图表中以图形方式绘制状态和转换&#xff0c;而是使用状态转换表以表格格式表示模态逻辑。 使用状态转换表的好处包括&#xff1a; 易于对类列车状态机进行建模&#xff0c;其中模态逻辑涉及从一个状态到其邻居的转换…

处理uniapp刷新后,点击返回按钮跳转到登录页的问题

在使用uniapp的原生返回的按钮时&#xff0c;如果没有刷新会正常返回到对应的页面&#xff0c;如果刷新后会在当前页反复横跳&#xff0c;或者跳转到登录页。那个时候我第一个想法时&#xff1a;使用浏览器的history.back()方法。因为浏览器刷新后还是可以通过右上角的返回按钮…