我正在阅读有关Spring文档Spring Doc中的@Matrixvariable批注
我已经了解了这种简单的语法
// GET / pets / 42; q = 11; r = 22
@RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET)
public void findPet(@PathVariable String petId, @MatrixVariable int q) {
// petId == 42
// q == 11
}
但在理解以下代码段时遇到问题
// GET /owners/42;q=11;r=12/pets/21;q=22;s=23
@RequestMapping(value = "/owners/{ownerId}/pets/{petId}", method = RequestMethod.GET)
public void findPet(
@MatrixVariable Map<String, String> matrixVars,
@MatrixVariable(pathVar="petId"") Map<String, String> petMatrixVars) {
// matrixVars: ["q" : [11,22], "r" : 12, "s" : 23]
// petMatrixVars: ["q" : 11, "s" : 23]
}
这是什么语法@MatrixVariable(pathVar =“ petId”“)
我不了解Matrixvariable注释的pathVar属性吗?
这行对我来说
// matrixVars: ["q" : [11,22], "r" : 12, "s" : 23]
可以确定,此变量已添加所有矩阵变量。但是,将petMatrixVars与这些特定值相加意味着
//petMatrixVars: ["q" : 11, "s" : 23] ? why not //petMatrixVars: ["q" : 22, "s" : 23] ?
在此先感谢您花费在此线程上的时间!!
最佳答案
这称为Partial Binding
,用于从该路径段中的该段获取所有变量,或者如果要从该路径段docs中获取每个变量,则本文档here中的输出错误。
在您的示例中,您将获得petId
{21}之后路径中的所有变量
// GET /owners/42;q=11;r=12/pets/21;q=22;s=23
@MatrixVariable(pathVar="petId") Map<String, String> petMatrixVars)
如果您只想在
q
段之后获取petId
,则@MatrixVariable(value ="q",pathVar="petId") int q
这是带有输出的示例,对于
@MatrixVariable
,我们需要首先启用它们import org.springframework.context.annotation.Configuration;
importorg.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.util.UrlPathHelper;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
UrlPathHelper urlPathHelper = new UrlPathHelper();
urlPathHelper.setRemoveSemicolonContent(false);
configurer.setUrlPathHelper(urlPathHelper);
}
}
具有@requestmapping方法的控制器
@RequestMapping(value = "/owners/{ownerId}/pets/{petId}", method = RequestMethod.GET)
public void findPet(
@MatrixVariable Map<String, String> matrixVars,
@MatrixVariable(pathVar="petId") Map<String, String> petMatrixVars) {
System.out.println(matrixVars);
System.out.println(petMatrixVars);
}
}
要求:
http://localhost:8080/sample/owners/42;q=11;r=12/pets/21;q=22;s=23
输出:
{q=11, r=12, s=23}
{q=22, s=23}
如果我更改
@MatrixVariable Map<String, List<String>> matrixVars,
输出是
{q=[11, 22], r=[12], s=[23]}
{q=22, s=23}