0
点赞
收藏
分享

微信扫一扫

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 (保存用户)
  • 隐藏资源的访问行为, 无法通过地址得知对资源是何种操作
  • 书写简化
  • 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的格式描述,表示此类资源,而非单个资源
    • 例如: usersbooksaccounts

**RESTful 入门案例

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

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

Untitled

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

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

Untitled

  • @RequestMapping

Untitled

  • @PathVariable

Untitled

Untitled

RESTful 快速开发

  • 使用 @RestController 注解开发 RESTful 风格

Untitled

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

Untitled

教你一招:复制模块

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

Untitled

Untitled

Untitled

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

修改基础配置

Untitled

  • 修改服务器端口
server.port=80
  • 关闭运行日志图标(banner)
spring.main.banner-mode=off
  • 设置日志相关
logging.level.root=debug
  • https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#application-properties
  • 官方文档中参考文档第一项:Application Propertie
  1. SpringBoot 中导入对应starter后,提供对应配置属性
  2. 书写 SpringBoot 配置采用关键字+提示形式书写

3种配置文件类型

Untitled

  • application.properties
server.port=80
  • application.yml
server:
  port: 81
  • application.yaml
server:
  port: 82
  • SpringBoot 提供了3种配置文件的格式
  1. properties(传统格式/默认格式)
  2. yml(主流格式)
  3. yaml

配置文件加载优先级

Untitled

  • application.properties > application.yml > application.yaml
  • application.yml
  1. 配置文件间的加载优先级:properties(最高)ymlyaml(最低)
  2. 不同配置文件中相同配置按照加载优先级相互覆盖 (高优先级配置内容会覆盖低优先级配置内容),不同配置文件中不同配置全部保留

教你一招:属性提示消失解决方案

Untitled

Untitled

关于 yaml

yaml 简介

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

Untitled

yaml 语法规则

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

country: china
province: beijing
city: beijing
area: haidian

yaml 数据类型

Untitled

# 字面值表示方式
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 连接,最后使用 + 代表时区

Untitled

# 数组书写格式
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 单一属性数据

Untitled

		// 读取 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...";
    }

Untitled

  1. 使用 @Value 配合 SpEL 读取单个数据
  2. 如果数据存在多层级,依次书写层级名称即可

yaml 文件中的变量引用

Untitled

baseDir: c:\windows

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

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

Untitled

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...";
    }

Untitled

  1. 在配置文件中可以使用 ${属性名} 方式引用属性值
  2. 如果属性中出现特殊字符,可以使用双引号包裹起来作为字符解析

读取 yaml 全部属性数据

  • 封装全部数据到 Environment对象
  • 注意要导入这个包:import org.springframework.core.env.Environment;

Untitled

		// 使用自动装配,将所有的数据封装到一个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...";
    }

Untitled

  1. 使用 Environment 对象封装全部配置信息
  2. 使用 @Autowired 自动装配数据到 Environment 对象中

取 yaml 引用类型属性数据

  • 自定义对象封装指定数据

Untitled

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

Untitled

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

datasource:
  driver: com.mysql.jdbc.Driver
  url: jdbc:mysql://localhost/springboot_db
  username: root
  password: root666123
  • 数据模型类: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...";
    }

Untitled

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

相关推荐

0 条评论