学堂 学堂 学堂公众号手机端

SpringBoot 入门案例之基础篇二

lewis 1年前 (2024-04-15) 阅读数 13 #技术


REST 风格简介

什么是 REST ?

REST(Representational State Transfer)表现形式状态转换传统风格资源描述形式​​http://localhost/user/getById?id=1​​ (得到id为1的用户)​​http://localhost/user/saveUser​​ (保存用户)REST风格描述形式​​http://localhost/user/1​​ (得到id为1的用户)​​http://localhost/user​​ (保存用户)

优点


隐藏资源的访问行为, 无法通过地址得知对资源是何种操作书写简化

按照 REST 风格访问资源时使用**​​行为动作​​**区分对资源进行了何种操作

​GET​​​ 用来获取资源,​​POST​​​ 用来新建资源,​​PUT​​​ 用来更新资源,​​DELETE​​ 用来删除资源​​http://localhost/users​​​ 查询全部用户信息​​GET (查询)​​​​http://localhost/users/1​​​ 查询指定用户信息​​GET (查询)​​​​http://localhost/users​​​ 添加用户信息​​POST (新增/保存)​​​​http://localhost/users​​​ 修改用户信息​​PUT (修改/更新)​​​​http://localhost/users/1​​​ 删除用户信息​​DELETE (删除)​

注意

上述行为是约定方式,约定不是规范,可以打破,所以称REST风格,而不是REST规范描述模块的名称通常使用复数,也就是加s的格式描述,表示此类资源,而非单个资源例如:​​users​​​、​​books​​​、​​accounts​​ …

根据REST风格对资源进行访问称为 ​RESTful

**​RESTful​ 入门案例

步骤

①:设定http请求动作(动词)

使用​​@RequestMapping​​​ 注解的​​method​​ 属性声明请求的方式使用​​@RequestBody​​ 注解 获取请求体内容。直接使用得到是 key=value&key=value…结构的数据。get 请求方式不适用使用​​@ResponseBody​​​ 注解实现将 controller 方法的​​返回对象​​​ 转换为​​json​​格式 响应给客户端​​@RequestMapping(value = "/users",method = RequestMethod.POST)​

②:设定请求参数(路径变量)

使用​​@PathVariable​​​ 用于绑定​​url​​​ 中的​​占位符​​​。例如:请求 url 中 /delete/​​{id}​​​,这个​​{id}​​就是 url 占位符。

​@RequestMapping​

​@PathVariable​

​@RequestBody​​​、​​@RequestParam​​​、​​@PathVariable​​ 三者的区别 ?

RESTful 快速开发 使用​​@RestController​​ 注解开发 RESTful 风格

使用​​@GetMapping​​​、​​@PostMapping​​​、​​@PutMapping​​​、​​@DeleteMapping​​​ 简化​​@RequestMapping​​ 注解开发

教你一招:复制模块

原则

保留工程基础结构抹掉原始工程痕迹

操作步骤

小结

在工作空间中复制对应工程,并修改工程名称删除与Idea相关配置文件,仅保留src目录与pom.xml文件修改pom.xml文件中的artifactId与新工程/模块名相同删除name标签(可选)保留备份工程供后期使用修改基础配置

修改配置

修改服务器端口
server.port=80
关闭运行日志图标(banner)
spring.main.banner-mode=off
设置日志相关
logging.level.root=debug

SpringBoot 内置属性查询

​​https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#application-properties​​官方文档中参考文档第一项:​​Application Propertie​

小结

SpringBoot 中导入对应starter后,提供对应配置属性书写 SpringBoot 配置采用关键字+提示形式书写3种配置文件类型

配置文件格式

SpringBoot提供了多种属性配置方式

​application.properties​
server.port=80
​application.yml​
server:
port: 81
​application.yaml​
server:
port: 82

小结

SpringBoot 提供了3种配置文件的格式properties(传统格式/默认格式)​yml(主流格式)​yaml配置文件加载优先级

SpringBoot 配置文件加载顺序

​application.properties​​​ >​​application.yml​​​ >​​application.yaml​

​常用​​配置文件种类

​application.yml​

小结

配置文件间的加载优先级:​​properties(最高)​​​、​​ymlyaml(最低)​​不同配置文件中相同配置按照​​加载优先级​​相互覆盖 (高优先级配置内容会覆盖低优先级配置内容),​​不同配置文件中不同配置全部保留​​教你一招:属性提示消失解决方案

关于 ​yaml​yaml 简介​​YAML(YAML Ain’t Markup Language)​​,一种数据序列化格式优点:容易阅读容易与脚本语言交互以数据为核心,重数据轻格式YAML文件扩展名​​.yml (主流)​​​​.yaml​

yaml 语法规则大小写敏感属性层级关系使用多行描述,每行结尾使用冒号结束使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(​​不允许使用Tab键​​)属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)​​key: value​​​ ->​​value 前面一定要有空格​​​​# 表示注释​​核心规则:数据前面要加空格与冒号隔开
server:
servlet:
context-path: /hello
port: 82

country: china
province: beijing
city: beijing
area:
yaml 数据类型

字面值表示方式

# 字面值表示方式
boolean: TRUE #TRUE,true,True,FALSE,false , False 均可
float: 3.14 #6.8523015e+5 # 支持科学计数法
int: 123 #0b1010_0111_0100_1010_1110 # 支持二进制、八进制、十六进制
# null: ~ # 使用 ~ 表示 null
string: HelloWorld # 字符串可以直接书写
string2: "Hello World" # 可以使用双引号包裹特殊字符
date: 2018-02-17 # 日期必须使用 yyyy-MM-dd 格式
datetime: 2018-02-17T15:02:31+08:00 # 时间和日期之间使用 T 连接,最后使用 + 代表时区

数组表示方式:在属性名书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔

# 数组书写格式
subject:
- Java
- 前端
- 大数据

# 数组书写缩略格式
subject2: [Java,前端,大数据]

# 对象书写格式
enterprise:
name: zhangsan
age: 16

# 对象数组书写格式
users:
- name: Tom
age: 4

- name: Jerry
age: 5

# 对象数组书写格式二
users2:
-
name: Tom
age: 4
-
name: Jerry
age: 5

# 对象数组书写缩略格式
users3: [ { name:Tom , age:4 } , { name:Jerry , age:5 } ]
读取 yaml 单一属性数据

使用 ​​@Value​​ 读取单个数据,属性名引用方式:${一级属性名.二级属性名……}

// 读取 yaml 数据中的单一数据
@Value("${country}")
private String country1;

@Value("${user.name}")
private String name1;

@Value("${subject[1]}")
private String subject1;

@Value("${users[1].age}")
private String age1;

@GetMapping
public String getById() {
System.out.println("springboot is running...");
System.out.println("country1 = " + country1);
System.out.println("name1 = " + name1);
System.out.println("subject1 = " + subject1);
System.out.println("age1 = " + age1);
return "spring is running...";
}

小结

使用​​@Value​​​ 配合​​SpEL​​ 读取单个数据如果数据存在多层级,依次书写层级名称即可yaml 文件中的变量引用

在配置文件中可以使用属性名引用方式引用属性

baseDir: c:\windows

# 使用 ${属性名} 引用数据
tempDir: ${baseDir}\temp
@Value("${tempDir}")
private String tempDir;

@GetMapping
public String getById() {
System.out.println("tempDir = " + tempDir);
return "spring is running...";
}

属性值中如果出现 ​​转义字符​​​,需要使用​​双引号​​包裹

baseDir: c:\windows100

# 使用 ${属性名} 引用数据
# 使用引号包裹的字符串,其中的转义字符可以生效
tempDir: "${baseDir}\temp \t1 \t2 \t3"
@Value("${tempDir}")
private String tempDir;

@GetMapping
public String getById() {
System.out.println("tempDir = " + tempDir);
return "spring is running...";
}

小结

在配置文件中可以使用​​${属性名}​​ 方式引用属性值如果属性中出现特殊字符,可以使用​​双引号​​包裹起来作为字符解析读取 yaml 全部属性数据封装全部数据到 Environment对象注意要导入这个包:​import org.springframework.core.env.Environment;

// 使用自动装配,将所有的数据封装到一个Environment对象中
@Autowired
private Environment env;

@GetMapping
public String getById() {
System.out.println("springboot is running...");
System.out.println("country1 = " + country1);
System.out.println("name1 = " + name1);
System.out.println("subject1 = " + subject1);
System.out.println("age1 = " + age1);
System.out.println("tempDir = " + tempDir);
System.out.println("----------------------------");
System.out.println(env.getProperty("subject[1]"));
System.out.println(env.getProperty("user.name"));
return "spring is running...";
}

小结

使用​​Environment​​ 对象封装全部配置信息使用​​@Autowired​​​ 自动装配数据到​​Environment​​ 对象中读取 yaml 引用类型属性数据自定义对象封装指定数据

自定义对象封装指定数据的作用

yaml 配置文件
# 操作步骤:
# 1、创建类,用于封装下面的数据
# 2、由spring帮我们去加载数据到对象中,一定要告诉spring加载这组信息
# 3、使用的时候从spring中直接获取信息使用

datasource:
driver: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost/springboot_db
username: root
password:
数据模型类:MyDataSource
// 1.定义数据模型封装yaml文件中对应的数据
// 2.定义为spring管控的bean
@Component
// 3.指定加载的数据
@ConfigurationProperties(prefix = "datasource")
public class MyDataSource {

private String driver;
private String url;
private String username;
private String password;

public String getDriver() {
return driver;
}

public void setDriver(String driver) {
this.driver = driver;
}

public String getUrl() {
return url;
}

public void setUrl(String url) {
this.url = url;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

@Override
public String toString() {
return "MyDataSource{" + "driver='" + driver + '\'' + ", url='" + url + '\'' + ", username='" + username + '\'' + ", password='" + password + '\'' + '}';
}
}
测试
@Autowired
private MyDataSource myDataSource;

@GetMapping
public String getById() {
System.out.println("springboot is running...");
System.out.println("myDataSource = " + myDataSource);
return "spring is running...";
}

小结

使用​​@ConfigurationProperties​​ 注解绑定配置信息到封装类中封装类需要定义为Spring管理的bean,否则无法进行属性注入


版权声明

本文仅代表作者观点,不代表博信信息网立场。

热门