1.Spring boot的MVC常用注解
1.1 @PathVariable的使用
PathVariable可以拿到路径变量的值
1)、获取取单个值
//@PathVariable可以拿到路径变量的值
@RequestMapping("/car/{id}/owner/{user}")
public Object getCar(@PathVariable("id") Integer id,
@PathVariable("user") String user){
return id+"---"+user;
}
postman测试:
请求路径:
localhost:8080/PV/car/2/owner/张三
请求结果:
2---张三
2)、获取所有传值
map取全部值,其类型必须为Map<String,String>,键为路径变量名,值为传参值
//@PathVariable也可以拿到路径变量的全部值,放到map里面
@RequestMapping("/map/{id}/owner/{user}/{name}")
public Object getMap(@PathVariable Map<String,String> map){
return map;
}
postman测试:
请求路径:
localhost:8080/PV/map/2/owner/张三/李四
请求结果:
{
"id": "2",
"user": "张三",
"name": "李四"
}
1.2 @RequestParam的使用
RequestParam可以获取路径中的?传值
1)、 基础数据类型
我们使用RequestParam注解取?传值时,可以获取基础数据类型,也能能获取list集合
只要键一致就能写入到list集合中去
//@RequestParam可以获取路径中的?传值
@RequestMapping("/simple")
public Object getSimple(@RequestParam("username") String username,
@RequestParam("age") Integer age,
@RequestParam("address") List<String> address){
Map<String,Object> map=new HashMap<>();
map.put("username",username);
map.put("age",age);
map.put("address",address);
return map;
}
postman测试:
请求路径:
http://localhost:8080/RP/simple?username=李泽林&age=18&address=湖北荆州&address=北京海淀&address=广州佛山
请求结果:
{
"address": [
"湖北荆州",
"北京海淀",
"广州佛山"
],
"age": 18,
"username": "李泽林"
}
2)、map获取全部
注意map类型无法获取到list类型的全部值,如果有list类型就会出现值丢失的情况
因为map是键不允许重复的,键相同的情况下,先写入的值会被后写入的值替代
由此我们可以得出游览器通过?方式传值时,值的写入顺序是从后到前,从右到左
然后我们还可以通过他返回的数据得出,使用的是HashMap,因为先进后出
不过知道了也没啥用QAQ。
//@RequestParam也可以批量获取全部值
@RequestMapping("/All")
public Object getAll(@RequestParam Map<String,String> all ){
Map<String,Object> map=new HashMap<>();
map.put("all",all);
return map;
}
postman测试:
请求路径:
http://localhost:8080/RP/All?username=李泽林&age=18&address=湖北荆州&address=北京海淀&address=广州佛山
请求结果:
{
"all": {
"username": "李泽林",
"age": "18",
"address": "湖北荆州"
}
}
1.3 @RequestHeader的使用
RequestHeader可以拿到请求头信息
-
值为String类型时:获取请求头信息的单个参数值
例如:@RequestHeader(“User-Agent”),是获取整个请求头map中的键为User-Agent的value值
-
值为map类型时:获取整个请求头信息
map类型必须为:Map<String,String>
//@RequestHeader可以拿到请求头信息
@RequestMapping("/map")
public Object getMap(@RequestHeader Map<String,String> header,
@RequestHeader("User-Agent") String userAgent){
Map<String,Object> map=new HashMap<>();
map.put("header",header);
map.put("userAgent",userAgent);
return map;
}
postman测试:
请求路径:
http://localhost:8080/HC/map
请求结果:
{
"header": {
"user-agent": "PostmanRuntime/7.28.0",
"accept": "*/*",
"postman-token": "1be343ca-a84f-473c-9a7f-0d9962573ee7",
"host": "localhost:8080",
"accept-encoding": "gzip, deflate, br",
"connection": "keep-alive"
},
"userAgent": "PostmanRuntime/7.28.0"
}
1.4 @CookieValue 的使用
CookieValue 获取到游览器请求头信息
- 值为String类型时: 获取到cookie的value值信息
- 值为cookie类型时:获取到整个cookie信息
//@CookieValue可以拿到请求的cookie信息
@RequestMapping("/cookie")
public Object getCookie(@CookieValue("Idea-d1852ee0") String Idea,
@CookieValue("Idea-d1852ee0") Cookie cookie){
Map<String,Object> map=new HashMap<>();
map.put("cookie",cookie);
map.put("Idea",Idea);
return map;
}
postman测试:
postm设置请求参数:
cookie:97a7615b-0d58-478c-8f6f-8d76a86b5697
请求路径:
http://localhost:8080/CC/cookie
请求结果:
{
"cookie": {
"name": "Idea-d1852ee0",
"value": "97a7615b-0d58-478c-8f6f-8d76a86b5697",
"version": 0,
"comment": null,
"domain": null,
"maxAge": -1,
"path": null,
"secure": false,
"httpOnly": false
},
"Idea": "97a7615b-0d58-478c-8f6f-8d76a86b5697"
}
1.5 @RequestBody的使用
RequestBody为获取post访问的请求参数,例如表单提交
一般习惯于json提交,然后通过ObjectMapper以及JsonNode来解析json串中的数据
@RequestMapping("/body")
public Object postBody(@RequestBody String body) {
//parseString(body,"username")这样就能拿到json串中的键为username的值了
System.out.println(parseString(body,"username"));
return body;
}
public String parseString(String body, String field) {
ObjectMapper mapper = new ObjectMapper();
JsonNode node = null;
try {
node = mapper.readTree(body);
JsonNode leaf = node.get(field);
if (leaf != null)
return leaf.asText();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
postman测试:
请求路径:
localhost:8080/BC/body
请求体:
{
"username":"李泽林",
"password":"mxw13579"
}
请求结果:
{
"username":"李泽林",
"password":"mxw13579"
}
1.6 @RequestAttribute的使用
RequestAttribute为获取request域中的Attribute数据
下面我们通过 “forward:/AC/getAttribute” 地址转发到了getAttribute里面
-
通过@RequestAttribute注解来获取我们在goto中写入request中的msg数据
@RequestAttribute(“msg”) String attribute
-
通过HttpServletRequest方式来获取
因为在goto写入值然后转发到getAttribute中,实际上他们还在同一个request域中
通过 request.getAttribute(“msg”) 就可以获取到数据
@RequestMapping("/goto")
public Object goTo(HttpServletRequest request){
request.setAttribute("msg","wdndm");
return "forward:/AC/getAttribute";
}
@ResponseBody
@RequestMapping("/getAttribute")
public Object getAttribute(@RequestAttribute("msg") String attribute,
HttpServletRequest request){
request.getAttribute("msg");
return attribute;
}
postm测试:
请求路径:
http://localhost:8080/AC/goto
请求结果:
wdndm