《springboot实战》第一章 SpringBoot起步(下)

简介: 《springboot实战》第一章 SpringBoot起步(下)

3.3、通过@PathVariable 接收参数

前端访问路径:http://127.0.0.1/user/logintwo/zs/123

后端Java代码:

@RequestMapping("/logintwo/{userName}/{pwd}")
    public Map loginTwo(@PathVariable String userName,
                        @PathVariable String pwd) {
        // URL: http://127.0.0.1/user/logintwo/zs/123
        //第三种方式接收入参
        System.out.println(userName + "||" + pwd);
        Map map = new HashMap();
        map.put("code" , 200);
        map.put("msg" , "success");
        return map;
    }

3.4、通过@RequestBody 接收参数

前端JavaScript代码:

//针对@RequestBody 接收入参的前端ajax请求
    $.ajax({
      url: "http://localhost:8089/api/Home",
      data: JSON.stringify(obj), 
      method: "post",
      dataType: "json",
      contentType: 'application/json',
      success: function (data) {
          console.log(data)
          if (data.code == 200) {
              alert("登录成功");
          } else {
              alert("登录失败:" + data.msg);
          }
      }

后端Java代码:

@PostMapping("/register")
    public Map register(@RequestBody User user) {
        // URL: http://127.0.0.1/user/register/
        // {userName:xxx,pwd:xxx}
        //第四种方式接收入参
        System.out.println(new Gson().toJson(user) );
        Map map = new HashMap();
        map.put("code" , 200);
        map.put("msg" , "success");
        return map;
    }

4、starter机制

starter 中整合了该场景下各种可能用到的依赖,用户只需要在 Maven 中引入 starter 依赖,SpringBoot 就能自动扫描到要加载的信息并启动相应的默认配置

比如:

<!--spring boot parent项目依赖,版本依赖-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.6.13</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

Spring Boot 项目可以通过继承 spring-boot-starter-parent 来获得一些合理的默认配置,它主要提供了以下特性:

  • 默认 JDK 版本(Java 8)
  • 默认字符集(UTF-8)
  • 依赖管理功能
  • 资源过滤
  • 默认插件配置
  • 识别 application.properties 和 application.yml 类型的配置文件

5、YAML标记语言

springBoot 默认使用以下 2 种全局的配置文件,其文件名是固定的。

5.1、application.properties

server.port= 8081

5.2、application.yml

server:
  port: 8081

5.2.1、YAML 简介

YAML 全称 YAML Ain’t Markup Language,比xml更适合做配置文件

YAML 的语法如下:

  • 使用缩进表示层级关系。
  • 缩进时不允许使用 Tab 键,只允许使用空格。
  • 缩进的空格数不重要,但同级元素必须左侧对齐。
  • 大小写敏感。

比如:

server:
  port: 8081
 spring:
  profiles: dev
  datasource:
    url: xxxxxxxxx

5.2.2、YYAML 支持以下三种数据结构

5.2.2.1、对象:键值对的集合

使用缩进表示对象与属性的层级关系

user:
    name: Kelvin
    gender: 男

行内写法:

user: {name: Kelvin,gender: 男}

5.2.2.2、数组:一组按次序排列的值

使用-表示集合元素

hobbyList:
   - run
   - badminton
   - mountain climb

hobbyList: [run,badminton,mountain climb]

使用,表示数组元素

hobbies:run,badminton,mountain climb

5.2.2.3、字面量:单个的、不可拆分的值

数值、日期、字符串等

YAML组织结构:一个文件可有多个文档组成,文档之间用“—”分隔

6、配置文件与JavaBean绑定

SpringBoot 提供了以下 2 种方式进行配置绑定:

6.1、使用 @ConfigurationProperties 注解

定义JavaBean

user:
  userName: Kelvin
  gender: 男
  # 对应的Bean文件里的数组
  hobbies: run, badminton, mountainclimb
  # 对应的Bean文件里的List
  hobbyList:
    - run
    - badminton
    - mountainclimb
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
/**
 * 用户实体类
 */
@Data
@Component
@ConfigurationProperties(prefix = "user")
public class User {
    /**
     * 名字
     */
//    @Value("${user.userName}")
    private String userName;
    /**
     * 性别
     */
//    @Value("${user.gender}")
    private String gender;
    /**
     * 爱好
     */
//    @Value("${user.hobbies}")
    private String[] hobbies;
    /**
     * 爱好
     */
    private List<String> hobbyList;
    public User() {
    }
}
@SpringBootTest
class SpringbootApplicationTests {
    /**
     * 用户实体类对象
     */
    @Autowired
    private User user;
    @Test
    void contextLoads() {
        System.out.println("#############user: " + user);
    }
}

打印日志:#############user: User{name=‘Kelvin’, gender=‘男’, hobbies=[run, badminton, mountainclimb]}

6.2、使用 @Value 注解

/**
 * 用户实体类
 */
@Component
public class User {
    /**
     * 名字
     */
    @Value("${user.userName}")
    private String userName;
    /**
     * 性别
     */
    @Value("${user.gender}")
    private String gender;
    /**
     * 爱好
     */
    private String[] hobbies;
}

6.3、@Value 与 @ConfigurationProperties 对比

6.3.1、 使用位置不同

  • @ConfigurationProperties:标注在 JavaBean 的类名上;
  • @Value:标注在 JavaBean 的属性上。

6.3.2、功能不同

  • @ConfigurationProperties:用于批量绑定配置文件中的配置;
  • @Value:只能一个一个的指定需要绑定的配置。

6.3.3、松散绑定支持不同@ConfigurationProperties:支持松散绑定(松散语法),例如实体类 Person 中有一个属性为 firstName,那么配置文件中的属性名支持以下写法:

  • person.firstName
  • person.first-name
  • person.first_name
  • PERSON_FIRST_NAME
    @Vaule:不支持松散绑定。

6.3.4、 SpEL 支持不同

  • @ConfigurationProperties:不支持 SpEL 表达式;
  • @Value:支持 SpEL 表达式。

6.3.5、复杂类型封装

  • @ConfigurationProperties:支持所有类型数据的封装,例如 Map、List、Set、以及对象等;
  • @Value:只支持基本数据类型的封装,例如字符串、布尔值、整数等类型。

6.3.6、应用场景不同

@Value 和 @ConfigurationProperties 两个注解之间,并没有明显的优劣之分,它们只是适合的应用场景不同而已。

  • 若只是获取配置文件中的某项值,则推荐使用 @Value 注解;
  • 若专门编写了一个 JavaBean 来和配置文件进行映射,则建议使用 @ConfigurationProperties 注解。

6.4、非application配置文件

@PropertySource(value =“classpath:userinfo.properties”)

定义配置文件

user.userName=Tiger
user.gender=男
user.hobbies=run,badminton,mountainclimb


目录
相关文章
|
4月前
|
前端开发 Java 数据库
基于springboot的书籍学习平台
基于springboot的书籍学习平台
|
XML Java 测试技术
SpringBoot入门篇 01、Springboot入门及配置(二)
SpringBoot入门篇 01、Springboot入门及配置(二)
|
15小时前
|
SQL Java 数据库连接
SpringBoot入门(十三)
SpringBoot入门(十三)
|
11月前
|
Java 编译器 数据格式
SpringBoot快速实践
启动一个SpringBoot项目 如果你觉得使用官网来创建太慢了,那你直接把以前项目的依赖粘过来就行了: 一个是父工程的依赖: <!--指定了一个父工程,父工程中的东西在该工程中可以继承过来使用--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.0</version> </parent> <!--JDK 的版本-->
30 0
|
前端开发 Java 应用服务中间件
《springboot实战》第一章 SpringBoot起步(上)
《springboot实战》第一章 SpringBoot起步(上)
86 0
|
SQL 存储 Java
SpringBoot基础学习文章
SpringBoot基础学习文章
187 0
SpringBoot基础学习文章
|
druid Java 关系型数据库
《SpringBoot篇》01.Springboot超详细入门(基础篇)(三)
《SpringBoot篇》01.Springboot超详细入门(基础篇)(三)
485 0
《SpringBoot篇》01.Springboot超详细入门(基础篇)(三)
|
Java 应用服务中间件 Maven
《SpringBoot篇》01.Springboot超详细入门(基础篇)(一)
《SpringBoot篇》01.Springboot超详细入门(基础篇)(一)
224 0
《SpringBoot篇》01.Springboot超详细入门(基础篇)(一)
|
JSON Java 应用服务中间件
《SpringBoot篇》01.Springboot超详细入门(基础篇)(二)
《SpringBoot篇》01.Springboot超详细入门(基础篇)(二)
171 0
《SpringBoot篇》01.Springboot超详细入门(基础篇)(二)
|
开发框架 负载均衡 前端开发
SpringBoot入门篇 01、Springboot入门及配置(一)
SpringBoot入门篇 01、Springboot入门及配置(一)