区别
- 常规请求传参:/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);
}
}
解决问题。