SpringBoot——@ModelAttribute注解矩阵变量

区别

  • 常规请求传参:/car/{path}?xxx=xx&aaa=ccc 该方式为queryString查询字符串。@RequstParam接收变量
  • 矩阵方式传参:/cars/path;low=34;brand=byd,audi,yd 以分号分割属性的为矩阵变量

前置问题:默认矩阵传参使用分号会请求失败,这是SpringBoot中请求会默认去掉分号";"后面的数据。
案例:

后台处理矩阵请求数据

package com.b0.boot.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

@Controller
public class RequestController {
    // 1.语法 /car/sell;low=34;brand=byd,audi,yd
    // 2.SpringBoot默认禁用了矩阵变量的功能
    //手动开启 :原理。对于路径的处理。UrlPathHelper进行解析。
    // removeSemicolonContent移除分号
    //3.矩阵变量必须有url路径变量才能被解析
    @ResponseBody
    @GetMapping("/car/{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;
    }
}

前端请求

http://localhost:8080/car/sell;low=34;brand=byd,audi,yd

上方请求会报错,是由于SpringBoot默认禁用了矩阵变量的功能即去掉分号(;)后面的值

解决方案

编写配置类,下方提供两个方法

package com.b0.boot.config;

@Configuration(proxyBeanMethods = false)
public class WebConfig{
    // 方法1:给容器中放一个  配置
    @Bean
    public WebMvcConfigurer webMvcConfigurer(){
        return new WebMvcConfigurer() {
            @Override
            public void configurePathMatch(PathMatchConfigurer configurer) {
                UrlPathHelper urlPathHelper = new UrlPathHelper();
                //设置不移除分号后的内容。矩阵变量功能就可以生效
                urlPathHelper.setRemoveSemicolonContent(false);
                configurer.setUrlPathHelper(urlPathHelper);
            }
        };
    }
}

方法二

package com.b0.boot.config;

@Configuration(proxyBeanMethods = false)
public class WebConfig implements WebMvcConfigurer {
    //方式2:实现接口方法
	@Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        UrlPathHelper urlPathHelper = new UrlPathHelper();
        //设置不移除分号后的内容。矩阵变量功能就可以生效
        urlPathHelper.setRemoveSemicolonContent(false);
        configurer.setUrlPathHelper(urlPathHelper);
    }
}

解决问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值