Part02 ☀️
Part02 ☀️
今日目标
- SpringBoot概述和入门
- Maven入门
- SpringBoot进阶案例
- JSON格式
- SpringBoot获取参数方式
- 统一结果集
1 SpringBoot入门 ✏️ ❤️
1.1 Boot概述 🍐
SpringBoot
在没有正式的学习SpringBoot之前,我们要先来了解下什么是Spring。
我们可以打开Spring的官网(https://spring.io),去看一下Spring的简介:Spring makes Java simple。

Spring的官方提供很多开源的项目,我们可以点击上面的projects,看到spring家族旗下的项目,按照流行程度排序为:

Spring发展到今天已经形成了一种开发生态圈,Spring提供了若干个子项目,每个项目用于完成特定的功能。而我们在项目开发时,一般会偏向于选择这一套spring家族的技术,来解决对应领域的问题,那我们称这一套技术为spring全家桶 。

而Spring家族旗下这么多的技术,最基础、最核心的是SpringFramework。其他的spring家族的技术,都是基于SpringFramework的,SpringFramework中提供很多实用功能,如:依赖注入、事务管理、web开发支持、数据访问、消息服务等等。

而如果我们在项目中,直接基于SpringFramework进行开发,存在两个问题:配置繁琐、入门难度大。

所以基于此呢,spring官方推荐我们从另外一个项目开始学习,那就是目前最火爆的SpringBoot。
通过springboot就可以快速的帮我们构建应用程序,所以springboot呢,最大的特点有两个 :
- 简化配置
- 快速开发
Spring Boot 可以帮助我们非常快速的构建应用程序、简化开发、提高效率 。

SpringBoot 几乎霸占了整个微服务市场, 所以,大家在日常工作学习过程中,还是要学习SpringBoot
接下来,我们就直接通过一个SpringBoot的web入门程序,让大家快速感受一下,基于SpringBoot进行Web开发的便捷性。🎯
总结
课堂作业
- 为什么要学习Springboot?(提示:定义和作用、市场占有率、企业招聘要求)
- Spring Boot最大的特点是什么?🎤
1.2 Maven入门 ✏️
Maven入门
在创建SpringBoot项目之前,先要熟悉一下Maven的作用
Maven是一个项目管理工具,可以对Java项目进行构建、依赖管理。
- Maven解决了什么问题?
- Maven的本地仓库中存的是什么?
- Maven中央仓库中有世界上所有的代码吗?
1.3 Boot入门程序 ✏️
入门程序
需求:基于SpringBoot的方式开发一个web应用,浏览器发起请求/hello后,给浏览器返回字符串 "Hello World ~"。

代码操作
开发步骤
第1步:创建SpringBoot工程并添加启动类
第2步:定义HelloController类,添加方法hello,并添加注解
第3步:测试运行
项目放到非中文路径中~ 1、创建一个项目

2、检查Maven配置是否正确

3. 项目创建成功后,在pom.xml中添加<parent></parent>
父依赖,企业中使用2.7.4以下版本较多
<!-- springboot父工程-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.0</version>
<relativePath/>
</parent>
然后在引入依赖管理和插件
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- lombok的依赖,能免除get和set方法 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.28</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>3.5.0</version>
</plugin>
</plugins>
</build>
4. 整体效果如下:
5. 然后在src-java下创建包名cn.yangeit(也可以是你自己公司域名的反写),并在包下创建启动类 👇
package cn.yangeit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
System.out.println("项目启动成功!!!!");
}
}

在启动类的目录下,创建HelloController.java 内容如下:
同学们,千万不要对着一个一个字母敲,而是要充分利用idea的自动提示哦!!!
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(String name){
return "hello "+name;
}
}

- 启动项目
- 打开浏览器,访问链接:http://localhost:8080/hello?name=yange
- 观察浏览器是否有响应,已经参数是否在idea的控制台中正确输出输出

默认端口是:8080---修改为8848
YAML 是 JSON 的超集,简洁而强大,是一种专门用来书写配置文件的语言,可以替代 application.properties
YAML 的使用非常简单,利用缩进来表示层级关系,并且大小写敏感。

- 在 application.yml 中配置
server:
port: 80
修改步骤如下:👇

👈
总结
课堂作业
- 参考上述的讲义完成SpringBoot入门案例,理解SpringBoot简洁的特性🎤
同学们,一定要自己动手,不要复制粘贴,一定要自己敲代码,一定要自己敲代码,一定要自己敲代码!!!
完成后,将练习代码截图提交到任务平台,直接作为实训分数!
1.4 SpringBoot入门程序解析 🍐
入门程序我们已经搞定了,接下来,我们就一起来解析一下我们所编写的入门程序。
入门程序解析
Tomcat,是一个开源的Web应用服务器。 它可以看作是一个“小型网站服务器”,主要用于运行Java编写的网站

1. main方法如何启动Tomcat ?

因为我们在创建springboot项目的时候,选择了web开发的起步依赖 spring-boot-starter-web。而spring-boot-starter-web依赖,又依赖了spring-boot-starter-tomcat,由于maven的依赖传递特性,那么在我们创建的springboot项目中也就已经有了tomcat的依赖,这个其实就是springboot中内嵌的tomcat。
而我们运行引导类中的main方法,其实启动的就是springboot中内嵌的Tomcat服务器。 而我们所开发的项目,也会自动的部署在该tomcat服务器中,并占用8080端口号 。

1.5 SpringBoot进阶程序之响应数据结构 ❤️
SpringBoot进阶程序
访问boss直聘、百度等网站,发现返回的数据,不是简单的字符串,而是类似这样的,👇 https://www.zhipin.com/wapi/zpCommon/data/getCityShowPosition
上面这种特殊字符串叫做JSON,是企业中常用的前端后端交互的数据格式!!
下图是我们中州养老的部署图,发现,数据是来自数据库,数据库中的数据是一条条的,类似一个个对象,因此返回也是JSON格式
接下来,做一个案例,来体验SpringBoot项目的简便特性!!
代码操作
相关信息
- 创建User类,定义变量
- 根据HelloController的样子,创建UserController,将参数和返回值进行修改
- 运行测试,访问
创建User类,定义变量
@Data
public class User {
// id,name,age,password,department,description,hobby
private Integer id;
private String name;
private Integer age;
private String password;
private String department;
private String description;
private String hobby;
}
@RestController
public class UserController {
@RequestMapping("/user")
public User getUserById(Integer id){
//模拟数据库查询,是假数据
User user = new User();
user.setId(id);
user.setName("张三");
user.setAge(20);
user.setDescription("张三很帅");
user.setDepartment("研发部");
user.setHobby("打篮球");
return user;
}
}
- 启动项目
- 打开浏览器,访问链接:http://localhost:8848/user?id=3
- 观察浏览器是否有响应,已经参数是否在idea的控制台中正确输出输出

1.6 JSON格式的特点 ✏️🍐
JSON格式的特点

- JSON:让数据传输更优雅
- 在前后端进行交互时,如果是比较复杂的参数,前后端通过会使用JSON格式的数据进行传输。

学习Json,主要关注点:
- 在发送请求时,如何传递json格式的请求参数
- 在服务端的controller方法中,如何接收json格式的请求参数
总结
课堂作业
- JSON格式有何用途?🎤
1.7. SpringBoot获得参数和数据响应 ✏️🍐
SpringBoot获得参数和数据响应
本节,我们主要讲解,如何接收页面传递过来的请求数据

- 接收普通类型参数传递
- 接收路径参数
- 接收json数据参数
响应
- 返回一般Json数据
请求参数获取实操
代码操作
🎯 1. 普通类型参数
简单参数 :在向服务器发起请求时,向服务器传递的是一些普通的请求数据。
参数格式:
http://localhost:8848/users/simpleParam?name=韩立&age=188
路径上的参数名字和方法的形参必须一模一样,类型也要一致
操作步骤流程: 👇👇

🎯 2. 接收路径参数
路径参数:
参数格式:
http://localhost:8848/users/112
- 前端:通过请求URL直接传递参数
- 后端:使用
{…}
来标识该路径参数,需要使用@PathVariable
获取路径参数

🎯 3. JSON传参
JOSN参数:
JSON格式:
http://localhost:8848/users/jsonParam
- 前端:通过
请求体
传递json参数 - 后端:使用
@RequestBody
获取json参数
因为浏览器无法直接发送POST请求,所以需要借助Apifox工具,发送POST请求
json参数如下:
{
"id": 3,
"name": "韩立",
"age": 188,
"password": 1314,
"department": "黄枫谷",
"description": "一名修士",
"hobby": "跑路"
}
后端代码: 👇

注意:传过来的JSON和后端定义的实体类,属性名必须一致 ,否则无法转换
测试图解:👇

响应数据实操
SpringBoot工程,Controller中的方法返回值对象,自动转成了Json字符串

总结
课堂作业
- 根据上述提示,完成路径参数和普通参数和JSON参数的传值(JSOn参数可以先练习,后续再练习),可以参考上述的代码🎤
完成后,将练习代码截图提交到任务平台,直接作为实训分数!
1.8 统一结果集 ✏️🍐
统一结果集
通过观察百度搜索结果,发现百度搜索结果,返回的JSON数据格式,发现很相似,几乎都含有以下字段:
{
"code": 200,
"message": "操作成功",
"data": {}
}
code: 状态码,200表示成功,500表示失败 message: 提示信息 data: 返回的数据
统一结果集的作用:
- 统一返回格式,方便前端处理,无论是查询还是新增,修改,删除,返回的JSON格式都一样
那我们如何在我们项目中实现统一结果集呢?
- 导入一个AjaxResult类,用于封装返回结果
- 在Controller中,使用AjaxResult类封装返回结果
AjaxResult类:
package cn.yangeit;
import java.util.HashMap;
import java.util.Objects;
public class AjaxResult extends HashMap<String, Object>
{
public static final int SUCCESS = 200;
public static final int WARN = 601;
public static final int ERROR = 500;
private static final long serialVersionUID = 1L;
/** 状态码 */
public static final String CODE_TAG = "code";
/** 返回内容 */
public static final String MSG_TAG = "msg";
/** 数据对象 */
public static final String DATA_TAG = "data";
/**
* 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。
*/
public AjaxResult()
{
}
/**
* 初始化一个新创建的 AjaxResult 对象
*
* @param code 状态码
* @param msg 返回内容
*/
public AjaxResult(int code, String msg)
{
super.put(CODE_TAG, code);
super.put(MSG_TAG, msg);
}
/**
* 初始化一个新创建的 AjaxResult 对象
*
* @param code 状态码
* @param msg 返回内容
* @param data 数据对象
*/
public AjaxResult(int code, String msg, Object data)
{
super.put(CODE_TAG, code);
super.put(MSG_TAG, msg);
if (data!= null)
{
super.put(DATA_TAG, data);
}
}
/**
* 返回成功消息
* @return 成功消息
*/
public static AjaxResult success()
{
return AjaxResult.success("操作成功");
}
/**
* 返回成功数据
*/
public static AjaxResult success(Object data)
{
return new AjaxResult(SUCCESS, "操作成功", data);
}
/**
* 返回警告消息
*/
public static AjaxResult warn(String msg, Object data)
{
return new AjaxResult(WARN, msg, data);
}
/**
* 返回错误消息
*/
public static AjaxResult error()
{
return new AjaxResult(ERROR, "操作失败");
}
}
Controller中:
//请求路径:http://localhost:8848/user?id=1
@RequestMapping("/user")
public AjaxResult getUserById(Integer id){
//模拟数据库查询,是假数据
User user = new User();
user.setId(id);
user.setName("张三");
user.setAge(20);
user.setDescription("张三很帅");
user.setDepartment("研发部");
user.setHobby("打篮球");
return AjaxResult.success(user);
}
代码和测试图解:👇
