IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringBoot——Web开发之常用参数注解使用 -> 正文阅读

[Java知识库]SpringBoot——Web开发之常用参数注解使用

五、SpringBoot——Web开发

5.2 常用参数注解使用

注意:以下注解只是为了学习起来方便所以没有进行混合使用,但混合使用也是没有问题的。

5.2.1 @PathVariable——获取路径变量

@PathVariable注解用于将路径指定变量的值传到Controller。
用法:
1、通过给路径上预读取的值设置读取的参数名,加{属性值}
2、在方法的形参使用@PathVariable(“属性值”)获取对应的路径上的属性值
3、使用你想要接收的类型去接收这个属性值
????1) 建议对每个属性使用String类型接收,不容易报错
????2) 使用Map<String,String>把所有参数都接收,这种方式@PathVariable不需要加参数
代码演示如下:

package com.example.boot.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import java.sql.Struct;
import java.util.HashMap;
import java.util.Map;

@RestController
public class ParameterController {

    /**
     * 通过给路径上预读取的值设置读取的参数名,加{属性值}
     * 在方法的形参使用@PathVariable("属性值")获取对应的路径上的属性值
     * 使用你想要接收的类型去接收这个属性值
     * 1、建议对每个属性使用String类型接收,不容易报错
     * 2、使用Map<String,String>把所有参数都接收,这种方式@PathVariable不需要加参数
     */
    @GetMapping("/animal/{id}/owner/{name}")
    public Map<String, Object> getAnimal(@PathVariable("id")  Integer id,
                                         @PathVariable("name") String name,
                                         @PathVariable Map<String, Object> animal){
        Map<String,Object> map = new HashMap<>();
        map.put("id",id);
        map.put("name",name);
        map.put("animal",animal);
        return map;
    }
}

运行结果:
上面的代码,其实我故意用了Integer去接收id的值,然后用Map<String,Object>去接收,最后我们发现,animal这个map中,key和value都变成了String类型,而id的值是Integer类型。
我想表达的是:你可以用Integer接收 用户只能输入Integer类型数字的数据。但是,如果你用Map接收的话,那么,他底层一定会帮你转化成String类型。所以要特别注意。
在这里插入图片描述

5.2.2 @RequestHeader——获取请求头信息

@RequestHeader用于获取我们想要的请求头信息。(比如Host:用户的ip和端口号,User-Agent:用户使用的浏览器)
在这里插入图片描述
用法:
1、获取单个请求头:在形参中添加@RequestHeader("请求头的名称") String 变量名
2、获取所有请求头:在形参中添加@RequestHeader Map<String,String> 变量名

代码演示:

    @GetMapping("/animal/header")
    public Map<String,Object> getHeader( @RequestHeader("Host") String host,
                                         @RequestHeader("User-Agent") String userAgent,
                                         @RequestHeader Map<String,String> heads){
        Map<String,Object> map = new HashMap<>();
        map.put("host",host);
        map.put("user-agent",userAgent);
        map.put("heads",heads);
        return map;
    }

结果:
在这里插入图片描述

5.2.3 @RequestParam——获取指定请求参数

@RequestParam用来获取路径中?后特定的值。
用法:
1、获取单个属性值,在形参中使用@RequestParam("属性") String 变量名
2、获取单个属性的多个值,在形参中使用@RequestParam("属性") List<String> 变量名
3、获取全部属性值,在形参中使用@RequestParam Map<String,String> 变量名

代码演示:

    @GetMapping("/animal")
    public Map<String,Object> getAnimalByUsernameAndPassword(@RequestParam("username") String username,
                                                             @RequestParam("password") String password,
                                                             @RequestParam("lovers") List<String> lovers,
                                                             @RequestParam Map<String,String> params){
        Map<String,Object> map = new HashMap<>();
        map.put("username",username);
        map.put("password",password);
        map.put("lovers",lovers);
        map.put("params",params);
        return map;
    }

显示:
注意,使用Map的形式获取到的lovers只有Amy,因为他固定是String类型的,有人可能会说,那我把接收的Map改成Map<String,Object>不就行了吗,你以为我没想到吗,天真,行不通的哦,你写了Map,那就是两个String类型的key和value。
在这里插入图片描述

5.2.4 @RequestBody——获取请求头[POST请求专用]

作用:获取POST表单发送过来的信息。
用法:在形参中添加@RequestBody String 变量名
注意:这个只能这么获取,跟上面用Map<String,String>不同哈,他没有这种获取方式,也没有那种@RequestBody(“参数名”)的获取方式。
代码演示:

    @PostMapping("/requestBody")
    public Map<String,Object> getRequestBody(@RequestBody String content){
        Map<String,Object> map = new HashMap<>();
        map.put("content",content);
        return map;
    }

显示:
在这里插入图片描述
在浏览器按F12,其实也可以看到:
在这里插入图片描述

5.2.5 @RequestAttribute——获取request域中的值

作用:获取Request域中的值
用法:在形参中添加@RequestAttribute("request域中的key值") String 变量名
代码演示:

package com.example.boot.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestAttribute;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import java.util.HashMap;
import java.util.Map;

@Controller
public class RequestController {
    @GetMapping("/toSuccess")
    public ModelAndView toSuccess(ModelAndView modelAndView){
        //将数据保存到request域中
        modelAndView.addObject("msg","跳转成功");
        modelAndView.addObject("code",200);
        //跳转到/success请求
        modelAndView.setViewName("forward:/success");
        return modelAndView;
    }

    @ResponseBody
    @GetMapping("/success")
    public Map<String, Object> success(@RequestAttribute("msg") String msg,
                                       @RequestAttribute("code") String code){
        Map<String, Object> map = new HashMap<>();
        //将request域中的值放到map集合中
        map.put("msg",msg);
        map.put("code",code);
        //将数据以JSON格式响应出去
        return map;
    }
}

显示:
在这里插入图片描述

5.2.6 @MatrixVariable——矩阵变量

什么是矩阵变量?
之前我们的请求路径有用过/cars/{path}?key1=value1&key2=value2,这种呢,叫查询字符串(他终于有名字了)
矩阵变量呢,是使用请求路径/cars/{path;low=34;brand=byd,aodi,yd},他的语法是分号左边是访问路径,分号右边是矩阵变量;而多个变量又以分号区分。
比如:
汽车销售中查询brand是byd和aodi的。可能这么写:/cars/sell;low=34;brand=byd;brand=aodi或者这么写/cars/sell;low=34;brand=byd,aodi

注意:SpringBoot默认禁用矩阵变量的功能,开启方式如下(下面代码有两种方式,都可以开启解析矩阵变量):

package com.example.boot.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.HiddenHttpMethodFilter;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.util.UrlPathHelper;

@Configuration(proxyBeanMethods = false)
public class MyConfig implements WebMvcConfigurer {
//方法一、继承WebMvcConfigurer,重写configurePathMatch
    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        UrlPathHelper urlPathHelper = new UrlPathHelper();
        //设置不移除分号;后边的内容
        urlPathHelper.setRemoveSemicolonContent(false);
        configurer.setUrlPathHelper(urlPathHelper);
    }

//方式二、自己定义webMvcConfigurer这个Bean   
//    @Bean
//    public WebMvcConfigurer webMvcConfigurer(){
//        return new WebMvcConfigurer() {
//            @Override
//            public void configurePathMatch(PathMatchConfigurer configurer) {
//                UrlPathHelper urlPathHelper = new UrlPathHelper();
//                //设置不移除分号;后边的内容
//                urlPathHelper.setRemoveSemicolonContent(false);
//                configurer.setUrlPathHelper(urlPathHelper);
//            }
//        };
//    }
}

演示代码:(记得放在@RestController注解的类下

    @GetMapping("/cars/{path}")
    public Map<String,Object> carSell(@MatrixVariable("low") Integer low,
                                      @MatrixVariable("brand") List<String> brands,
                                      @PathVariable("path") String path){
        Map<String,Object> map = new HashMap<>();
        map.put("low",low);
        map.put("brand",brands);
        map.put("path",path);
        return map;
    }

显示:
在这里插入图片描述
如果现在的请求路径下有多个/,且每个/下都有相同的属性,该怎么读取咧?
我们可以使用他的pathVar属性指定读取哪个{值}。
代码演示:

    @GetMapping("/boss/{bossAge}/{empAge}")
    public Map<String,Object> boss(@MatrixVariable(value = "age", pathVar = "bossAge") Integer bossAge,
                                   @MatrixVariable(value = "age", pathVar = "empAge") Integer empAge){
        Map<String,Object> map = new HashMap<>();
        map.put("bossAge",bossAge);
        map.put("empAge",empAge);
        return map;
    }

显示:
在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-12 13:02:20  更:2021-09-12 13:03:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:38:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码