Spring核心 IOC AOP
//1. aop
//2. 核心代码
@Aspect // 增强方法 切点方法 顺序
@Component
public class LogAspect {
//定义切点
@Pointcut("execution(* com.itheima.service.impl.*.*(..))")
public void pt() {
}
@Around("pt()")
public Object m5(ProceedingJoinPoint pjp) throws Throwable {
return pjp.proceed();
}
}
//3. 通知类型
四大通知
环绕通知
//4. 切点定位
execution 表达式 * ..
annoatio 自定义注解
//5. 声明式事务
@Transactional
rollbackFor
propagation
SpringMVC入门
介绍
SpringMVC将Servlet一些通用功能进行了抽取和封装,使用它之后,代码主要有两部分组成:
- 前端控制器:由SpringMVC提供,主要负责接收参数和返回页面和数据
- 处理器:由程序员编写,主要负责参数的处理和业务层调用

入门案例
发送一个请求
name=张三&age=18,后台接收参数,封装一个User对象返回json数据

创建web工程
创建模块,换换为web工程,添加依赖

<dependencies>
<!--servlet-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<!--springmvc核心-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.16</version>
</dependency>
<!--jackson-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.1</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
</dependency>
</dependencies>
加入配置类
在项目中添加web环境的初始类和核心配置类

创建实体类
准备一个实体类,用于封装返回结果

创建处理器

部署项目
将项目部署到tomcat,浏览器访问
http://localhost:8080/user/demo1?name=张三&age=18,观察效果

执行流程

注解
@RequestMapping
@RequestMapping注解用于建立请求URL和处理方法之间的对应关系, 常见属性如下:
- value: 等同于path,用于为当前方法绑定访问路径
- method:用于限制请求类型,如果省略此选项,代表不对请求类型做限制
注意:此注解可以标注在方法上,也可以标注在类上,标注在类上代表类中的所有方法都可以共用一段URL

@ResponseBody
@ResponseBody注解用于将方法返回值直接响应给浏览器,如果返回值类型是对象或集合,将会转换为JSON格式响应
位置:Controller方法上/类上(如果标在类上,代表类中所有方法上都生效)
简化:@RestController = @Controller + @ResponseBody

405: 请求方式错误

postman
Postman是一款功能强大的接口调试工具

接收请求参数
在SpringMVC中,可以使用多种数据类型来接收前端传入的参数
简单类型
需要保证前端传递的参数名称跟方法的形参名称一致
请求

代码

对象类型
需要保证前端传递的参数名称跟实体类的属性名称一致
请求

代码

数组类型
需要保证前端传递的参数名称跟方法中的数组形参名称一致
请求

代码

集合类型
请求参数名与形参集合名称相同且请求参数为多个,使用
@RequestParam绑定参数关系
请求

代码

日期类型
接收参数为日期类型,需要使用
@DateTimeFormat定义参数格式
请求

代码

json参数
SpringMVC也可以接收请求体中的json字符串为参数,并且自动封装为指定对象
此时要求JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用
@RequestBody标识
请求

代码

路径参数
springmvc还支持通过请求路径直接传递参数,后台使用{…}来标识该路径参数,需要使用
@PathVariable获取
请求

代码

@RequestParam
@RequestParam标注在方法参数之前,用于对传入的参数做一些限制,常见属性如下:
- name:用于指定前端传入的参数名称
- defaultValue:当参数为非必传参数且前端没有传入参数时,指定一个默认值
请求

代码

统一异常处理
使用SpringMVC后,异常就不必在三层代码去处理了,而是直接抛给框架,框架会将所有的异常统一转交给我们自定义的统一异常处理类来处理。
SpringMVC支持下面两个注解来实现全局异常处理
@RestControllerAdvice 标注在类上,声明当前类是一个用于专门处理异常的类
@ExceptionHandler 标注在方法上,声明当前方法可以处理哪些异常

模拟异常

全局异常处理

Restful
介绍
REST是一种软件架构风格,其强调HTTP应当以资源为中心[在请求地址中尽量的不要出现动词]。
REST规范了HTTP请求动作,使用四个词语分别表示对资源的CRUD操作: GET(获取)、POST(新建)、PUT(更新)、DELETE(删除)
| 原来 | Restful | |
|---|---|---|
| 保存 | /saveUser | post /user |
| 修改 | /updateUser?id=1 | put /user/id/1 |
| 删除 | /deleteUser?id=1 | delete /user/1 |
| 查询所有 | /findAllUser | get /user |
| 查询一个 | /findByUserId?id=1 | get /user/1 |
保存和查询所有
请求

代码

删除和主键查询
请求

代码

回顾
404 路径问题
405 请求方式错误
400 请求参数错误
500 后台错误
200 成功
1. controller类上: @Controller + @ResponseBody ---> @RestController
2. 方法上+类上: @RequestMapping @PostMapping @PutMapping @GetMapping @DeleteMapping
3. 接收参数
@RequestBody----->请求体中json
@PathVariable---->请求路径
@DateTimeFormat ---->设置日期格式
@RequestParam --->集合
4. 异常
@RestControllerAdvice
@ExceptionHandler
请求参数位置
请求参数 /user?name=张三&age=18 不用注解,直接接收
请求体json Body @RequestBody
请求路径 /user/1 @PathVariable
2115

被折叠的 条评论
为什么被折叠?



