Spring Boot 2 学习笔记(5)——普通参数及基本注解

说明:本节内容全部都是关于SpringMVC的


1.基本参数注解

下面我们常用的这些注解:

  • @PathVariable(路径变量)
  • @RequestHeader(获取请求头)
  • @RequestParam(获取请求参数)
  • @CookieValue(获取cookie值)
  • @RequestBody(获取请求体[POST])
  • @RequestAttribute(获取request域属性)
  • @MatrixVariable(矩阵变量)

首先,来看一下 @RequestAttribute 注解

@RequestAttribute和@RequestParam

首先,这个Spring MVC注解@RequestAttribute类似于@RequestParam
,但既然分开作为两个注解,那就肯定是有所不同的

@RequestAttribute注解的参数在项目里是自己解析出来的,并不是前端传递的。具体一点,在项目里的拦截器里会对Token信息进行解析,解析出来的参数重新放在请求里 (用httpServletRequest.setAttribute(name, value)),后边接口接收参数时就用这个注解。

@RequestParam注解则表示这个参数是通过前端传递过来的,如果请求里没有这个参数,则会报错400 Bad Request。这个注解用来解析请求路径里的参数(get请求)或者post请求中form表单格式的请求参数

@MatrixVariable 矩阵变量

在页面开发的时候,cookie禁用了,session里面的内容怎么使用( 因为使用session需要获取cookie中的 sessionid ,所以一旦禁用了cookie就无法正常使用session了 )

SpringBoot 默认是禁用了矩阵变量的功能,需要我们手动开启

对于路径的处理,要通过UrlPathHelper进行解析,而在UrlPathHelpersetRemoveSemicolonContent移除分号内容,默认是true

	/**
	 * Set if ";" (semicolon) content should be stripped from the request URI.
	 * <p>Default is "true".
	 */
	public void setRemoveSemicolonContent(boolean removeSemicolonContent) {
		checkReadOnly();
		this.removeSemicolonContent = removeSemicolonContent;
	}

所以我们需要在自己的配置类中重新实现WebMvcConfigurer的该方法(两种方式)

	@Bean
    public WebMvcConfigurer webMvcConfigurer(){
        return new WebMvcConfigurer() {
            @Override
            public void configurePathMatch(PathMatchConfigurer configurer) {
                UrlPathHelper urlPathHelper=new UrlPathHelper();
                //不移除分号;后面的内容,矩阵变量可以生效
                urlPathHelper.setRemoveSemicolonContent(false);
                configurer.setUrlPathHelper(urlPathHelper);
            }
        };
    }
	@Override
    public void configurePathMatch(PathMatchConfigurer configurer) {

        UrlPathHelper urlPathHelper=new UrlPathHelper();
        //不移除分号;后面的内容,矩阵变量可以生效
        urlPathHelper.setRemoveSemicolonContent(false);
        configurer.setUrlPathHelper(urlPathHelper);
    }

@PathVariable路径变量

@PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上

例如:

public Map<String,Object> getCar(@PathVariable("id") Integer id,
                           @PathVariable("username") String name)

它自动将URL中模板变量 {id} 和 {username} 绑定到参数中去。

@RequestHeader 请求头

@RequestHeader用于将请求的头信息区数据映射到功能处理方法的参数上

例如:

public String test(  
       @RequestHeader("User-Agent") String userAgent,  
       @RequestHeader(value="Accept") String[] accepts) 

如上配置将自动将请求头“User-Agent”值入参到 userAgent 参数上,并将“Accept”请求头值入参到 accepts 参数上。

@RequestHeader也拥有和@RequestParam相同的三个参数,含义一样。

@CookieValue 获取cookie值

@CookieValue用于将请求的 cookie 数据映射到功能处理方法的参数上

例如:

public String test(@CookieValue(value="JSESSIONID", defaultValue="") String sessionId)

如上配置将自动将 JSESSIONID 值入参到 sessionId 参数上,defaultValue表示 cookie 中没有 JSESSIONID 时默认为空。

@RequestBody 请求体

@RequestBody注解用来接收POST请求BODY里的参数,格式为JSON格式。

2.复杂参数

我们在传入参数的时候,除了上面的这些注解,有时候我们还会传入一些不一样的参数,例如HttpServletRequest,还有MapModel这些,以及我们自己定义的对象(可以用 list 集合)也都是可以接收到的。
(事实上,你往map,model里面添加数据,其实就是往request域中加数据了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值