type
status
date
slug
summary
tags
category
icon
password
1.@RestController
@RestController = @Controller+@ResponseBody
其中@ResponseBody是只相应数据,不跳转页面
2.@RequestMapping
路径位置通配符:多个都能匹配上,那就精确优先
*:匹配任意多个字符(0~N)
**:匹配任意多层路径
?:匹配任意单个字符(1)
精确程度:完全匹配>?>*>**
精确路径必须全局唯一
3.@RequestMapping注解细节
3.1请求方式:method
GET
POST
DELETE
HEAD
PUT
OPTIONS
PATCH
TRACE
3.2请求参数:params
请求参数:params={"username","age"}
1)、username:
表示请求必须包含username参数
2)、age=18:
表示请求参数中必须包含age=18的参数
3)、gender!=1:
表示请求参数中不能包含gender=1的参数
3.3请求头:headers
请求头:headers={"haha"}
haha:表示请求中必须包含名为haha的请求头
3.4请求内容类型:consumes
请求内容类型:consumes={"application/json"};消费什么数据:
application/json:表示浏览器必须携带json格式的数据
3.5响应内容类型:produces
响应内容类型:produces={"text/plain;charset=utf-8"};生产什么数据;
4.请求处理
4.1实验一:使用普通变量,收集请求参数
请求参数username=zhangsan&password=12345&cellphone=12345456&agreement=on
要求:变量名和参数名保持一致
1、没有携带:包装类型自动封装为null,基本类型封装为默认值
2、携带、自动封装
4.2实验二:使用@RequestParam,逐一封装多个参数
username=zhangsan&password=123456&cellphone=1234&agreement=0n
@RequestParam::取出某个参数的值,默认一定要携带参数。无论请求参数带到了请求体中还是url?后面,他们都是请求参数,都可以直接用@RequestParam或者同一个变量名获取到
required=false:非必须携带;
defaultValue="123456",默认值,参数可以不带。
4.3实验三:使用POJO,统一封装多个参数
如果目标方法参数是一个pojo;SpringMVC会自动把请求参数和pojo属性进行匹配:
效果:
1、pojo的所有属性值都是来自于请求参数
2、如果请求参数没带,封装为null;
4.4实验四:使用@RequestHeader获取请求头数据
4.5实验五:使用@CookieValue获取Cookie数据
4.6实验6:使用POJO,级联封装复杂对象
4.7使用@RequestBody,封装JSON对象
@RequestBody Person person
1、拿到请求体中的json字符串
2、把json字符串转为person对象
4.8实验8:使用@RequestPart/@RequestParam,封装文件,测试文件上传
文件上传:
@RequestParam取出文件项,封装为MultipartFile,就可以拿到文件内容
4.9.实验9:使用HttpEntity,封装请求原始数据
HttpEntity:封装请求头、请求体;把整个请求拿过来
泛型;<String>:请求体类型;
可以自动转化
4.10.实验10:使用原生Servlet API,获取原生请求对象
5.响应处理
5.1实验1:返回json数据
5.2实验2:文件下载测试
注意点:
//1.文件名中文会乱码问题
String encode = URLEncoder.encode("美女.jpg", "utf-8");
//2.文件太大会内存溢出
InputStreamResource inputStreamResource = new InputStreamResource(fileInputStream);
5.3实验3:使用Thymeleaf模版引擎,实现服务端渲染
了解即可,因为使用Thymeleaf模版引擎其实就不是前后端分离开发,是前后端不分离开发,已经过时。
- Author:Blinky
- URL:http://preview.tangly1024.com/article/1d71c0db-37a0-8019-96bc-e0e263c23e08
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!