SpringBoot 入门案例之基础篇二
什么是 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
步骤
①:设定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
三者的区别 ?
@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(最低)
不同配置文件中相同配置按照加载优先级
相互覆盖 (高优先级配置内容会覆盖低优先级配置内容),不同配置文件中不同配置全部保留
教你一招:属性提示消失解决方案
关于 yamlyaml 简介YAML(YAML Ain’t Markup Language)
,一种数据序列化格式优点:容易阅读容易与脚本语言交互以数据为核心,重数据轻格式YAML文件扩展名.yml (主流)
.yaml
yaml 语法规则大小写敏感属性层级关系使用多行描述,每行结尾使用冒号结束使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键
)属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)key: value
->value 前面一定要有空格
# 表示注释
核心规则:数据前面要加空格与冒号隔开server:yaml 数据类型
servlet:
context-path: /hello
port: 82
country: china
province: beijing
city: beijing
area:
字面值表示方式
# 字面值表示方式
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 连接,最后使用 + 代表时区
数组表示方式:在属性名书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔
# 数组书写格式读取 yaml 单一属性数据
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 } ]
使用 @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 配置文件# 操作步骤:数据模型类:MyDataSource
# 1、创建类,用于封装下面的数据
# 2、由spring帮我们去加载数据到对象中,一定要告诉spring加载这组信息
# 3、使用的时候从spring中直接获取信息使用
datasource:
driver: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost/springboot_db
username: root
password:
// 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,否则无法进行属性注入
版权声明
本文仅代表作者观点,不代表博信信息网立场。