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