springBoot普通参数与基本注解

发布于:2022-12-20 ⋅ 阅读:(405) ⋅ 点赞:(0)

普通参数与基本注解

@PathVariable、@RequestParam、@RequestHeader、@CookieValue、@RequestAttribute、@MatrixVariable、@RequestBody
以上注解作用在控制器方法中的形参中
@PathVariable:获取rest风格请求路径中的请求参数
@RequestParam:获取原始请求方式中的请求参数
@RequestHeader:获取请求中的请求头信息
@CookieValue:获取请求中的Cookie值
rest方式和原始方式结合

<a href="/car/lisi/12?gender=男&inters=足球&inters=篮球">传参数</a>

控制器方法

@GetMapping("/car/{name}/{age}")
    public Map<String,Object> demo1(@PathVariable("name") String name,
                                    @PathVariable("age")Integer age,
                                    @PathVariable Map<String,String> pv,
                                    @RequestHeader("user-agent") String userAgent,
                                    @RequestHeader Map<String,String> header,
                                    @RequestParam("gender") String gender,
                                    @RequestParam("inters")List<String> inters,
                                    @RequestParam Map<String,String> param,
                                    @CookieValue("Pycharm-eea02815") String _ga,
                                    @CookieValue("Pycharm-eea02815") Cookie cookie
                                    ){

        Map<String,Object> map=new HashMap<>();
        map.put("name",name);
        map.put("age",age);
        map.put("pv",pv);
        map.put("userAgent",userAgent);
        map.put("header",header);
        map.put("gender",gender);
        map.put("inters",inters);
        map.put("param",param);
        map.put("_ga",_ga);
        map.put("cookie",cookie);
        return map;
    }

@RequestAttribute:获取共享数据域对象中的值

@RequestMapping("/go")
    public String go(HttpServletRequest request){

        request.setAttribute("msg","成功了");
        request.setAttribute("code",200);

        return "forward:/to";
    }

    @ResponseBody
    @RequestMapping("/to")
    public Map to(
                  @RequestAttribute("msg") String msg,
                  @RequestAttribute("code") Integer code,
                  HttpServletRequest request){
        Object msg1 = request.getAttribute("msg");
        HashMap<Object, Object> map = new HashMap<>();
        map.put("msg",msg);
        map.put("msg1",msg1);
        return map;
    }

@RequestBody:获取请求体,请求体中包含请求参数

<form action="/save" method="post">
    姓名:<input type="text" name="username">
    密码:<input type="password" name="pass">
    <input type="submit" value="提交">
</form>

controller方法

@RequestMapping("/save")
    public Map demo2(
            @RequestBody String body   //获取请求体,提交表单方式必须是post
    ){
        Map<String,Object> map=new HashMap<>();
        map.put("body",body);
        return map;
    }

测试:
在这里插入图片描述

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

@MatrixVariable:矩阵变量
虽然从Spring 3.2就已经支持==@MatrixVariable==特性,但直至现在其依然为默认禁用的状态。我们需要手工配置开启才能使用
配置类:实现WebMvcConfigurer接口

@Configuration                                                                                                                                                                                                                                                      
public class SpringBootConfig implements WebMvcConfigurer {                                                                                                                                                                                                         
   @Override                                                                                                                                                                                                                                                       
   public void configurePathMatch(PathMatchConfigurer configurer) {                                                                                                                                                                                                
      UrlPathHelper urlPathHelper = new UrlPathHelper();                                                                                                                                                                                                          
      urlPathHelper.setRemoveSemicolonContent(false);                                                                                                                                                                                                             
      configurer.setUrlPathHelper(urlPathHelper);                                                                                                                                                                                                                 
   }                                                                                                                                                                                                                                                               
}    

控制器方法:

@RestController
public class ParameterTestController {

    //1、语法: 请求路径:/cars/sell;low=34;brand=byd,audi,yd
    //2、SpringBoot默认是禁用了矩阵变量的功能
    //      手动开启:原理。对于路径的处理。UrlPathHelper进行解析。
    //              removeSemicolonContent(移除分号内容)支持矩阵变量的
    //3、矩阵变量必须有url路径变量才能被解析
    @GetMapping("/cars/{path}")
    public Map carsSell(@MatrixVariable("low") Integer low,
                        @MatrixVariable("brand") List<String> brand,
                        @PathVariable("path") String path){
        Map<String,Object> map = new HashMap<>();

        map.put("low",low);
        map.put("brand",brand);
        map.put("path",path);
        return map;
    }

    // /boss/1;age=20/2;age=10

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

        map.put("bossAge",bossAge);
        map.put("empAge",empAge);
        return map;

    }

}
本文含有隐藏内容,请 开通VIP 后查看