Bootstrap

Spring boot的MVC常用注解

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

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;