Postman
- 学习请求前,我们先下载并了解Postman,Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。
- 作用:常用于进行接口测试
- 特征
- 简单
- 实用
- 美观
- 大方
1. 请求(7种)
1.1 简单参数
1.1.1 原始方式
通过Servlet中提供的API HttpServletRequest
这里要注意 Controller 底层是 DispatcherServlet
Controller中,我们要想获取Request对象,可以直接在方法的形参中声明 HttpServletRequest 对象。然后就可以通过该对象来获取请求信息
1.1.2 SpringBoot方式
如果是简单参数,参数名与形参变量名相同,定义同名的形参即可接收参数
1.1.3 参数名不一致
如果方法形参名称与请求参数名称不一致,可以使用 @RequestParam 完成映射。
1.2 实体参数
1.2.1 简单实体对象
定义POJO实体类完成
需要遵守如下规则:请求参数名与POJO的属性名相同
1.2.2 复杂实体对象
复杂实体对象指的是,在实体类中有一个或多个属性,也是实体类型的
复杂实体对象的封装,需要遵守如下规则:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数。
1.3 数组集合参数
1.3.1 数组
- 数组参数:请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型形参即可接收参数
1.3.2 集合
- 集合参数:请求参数名与形参集合对象名相同且请求参数为多个,@RequestParam 绑定参数关系
1.4 日期参数
需要通过 @DateTimeFormat注解,以及其中的pattern属性来设置日期的格式。
1.5 JSON参数
JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数。需要使用 @RequestBody 标识。
1.6 路径参数
路径参数:通过请求URL直接传递参数,使用{…}占位来标识该路径参数,需要使用 @PathVariable 获取路径参数
2. 响应
2.1 @ResponseBody
类型:方法注解、类注解
作用:将当前方法返回值直接返回,如果是 实体/集合 转换为JSON返回
@RestController注解封装了@ResponseBody注解
3. 分层解耦
3.1 三层架构
- Controller:
- 接收前端发送的请求,对请求进行处理,并响应数据
- Service:
- 处理具体的业务逻辑
- Dao:
- 负责数据的访问操作,包含数据的增、删、改、查
3.2 分层解耦
了解软件开发领导涉及到的两个概念:
内聚和耦合
1).内聚:软件中各个功能模块内部的功能联系。
2).耦合:衡量软件中各个层/模块之间的依赖、关联的程度。
3).软件设计原则:高内聚低耦合。
3.3 IOC&DI
控制反转:
- Service层 及 Dao层的实现类,交给IOC容器管理。
在类上加上 @Component 注解,就是将该类声明为IOC容器中的bean。
依赖注入:
- 为Controller及Service注入运行时依赖的对象。
在成员变量上加上 @Autowired 注解,表示在程序运行时,Springboot会自动的从IOC容器中找到UserService类型的bean对象,然后赋值给该变量。
3.3.1 bean的声明
要把某个对象交给IOC容器管理,需要在对应的类上加上如下注解之一:
注解 | 说明 | 位置 |
@Component | 声明bean的基础注解 | 不属于以下三类时,用此注解 |
@Controller | @Component的衍生注解 | 标注在控制器类上 |
@Service | @Component的衍生注解 | 标注在业务类上 |
@Repository | @Component的衍生注解 | 标注在数据访问类上(由于与mybatis整合,用的少) |
注意:
- 声明bean的时候,可以通过value属性指定bean的名字,如果没有指定,默认为类名首字母小写。
- 目前来说,我们使用以上四个注解都可以声明bean,但是在集成后端web开发之后,声明控制器bean只能用@Controller,这里我们一般用@RestController,@RestController内包含@Controller
3.3.2 组件扫描
前面声明bean的四大注解,要想生效,还需要被组件扫描注解@ComponentScan扫描。
引导类声明注解 @SpringBootApplication包含@ComponentScan注解
默认扫描的范围是引导类所在包及其子包。
3.3.3 依赖注入
1). @Primary 注解
当存在多个相同类型的Bean注入时,加上@Primary注解,来确定默认的实现。
2). @Qualifier 注解
可以通过@Autowired ,配合@Qualifier 来指定我们当前要注入哪一个bean对象。 在@Qualifier的value属性中,指定注入的bean的名称。
3). @Resource注解
通过@Resource注解,并指定其name属性,通过name指定要注入的bean的名称。这种方式呢,是按照bean的名称进行注入。
@Autowird 与 @Resource的区别:
- @Autowird 属于spring框架,默认按照bean的类型注入。 可以配合 @Qualifier注解,实现按照名称注入。
- @Resource是JavaEE自带的注解,根据bean的名称进行注入的。