【发布时间】:2018-05-31 08:29:16
【问题描述】:
我正在构建一个 spring-mvc REST API 应用程序,我打算为我的一些端点使用矩阵变量。不幸的是,我无法为使用的每个矩阵变量检索多个值。
我的spring-mvc版本是spring-webmvc:4.3.12.RELEASE
我按照此实施示例中显示的步骤操作:http://www.baeldung.com/spring-mvc-matrix-variables。
我已启用 Spring MVC 矩阵变量:
package fr.compagny.project.configuration;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.util.UrlPathHelper;
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
UrlPathHelper urlPathHelper = new UrlPathHelper();
urlPathHelper.setRemoveSemicolonContent(false);
configurer.setUrlPathHelper(urlPathHelper);
}
}
所以我创建了 2 个测试端点:
package fr.compagny.project.webservice;
import [...]
@Api
@RefreshScope
@RestController
@RequestMapping(value = "/my_awesome_project")
public class ProjectWS {
//Services
private ProjectService projectService;
//Validator
private ValidatorService validator;
@ApiOperation(value = "Matrix Variable Test 1.")
@GetMapping(value = "/matrix_test_one/{vars}", produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.OK)
public String getMatrixTestOne (@MatrixVariable(pathVar = "vars", required = true) String v1,
@MatrixVariable(pathVar = "vars", required = true) String v2,
@MatrixVariable(pathVar = "vars", required = true) String v3) {
return v1 + v2 + v3;
}
@ApiOperation(value = "Matrix Variable Test 2.")
@GetMapping(value = "/matrix_test_two/{vars}", produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.OK)
public Map<String, String> getMatrixTestTwo (@MatrixVariable Map<String, String> vars) {
return vars;
}
@Autowired
public void setProjectService(ProjectService projectService) {
this.projectService = projectService;
}
@Autowired
public void setValidatorService(ValidatorService validatorService) {
this.validator = validatorService;
}
}
当我打电话时
GET http://[...]/my_awesome_project/matrix_test_one/v1=toto;v2=titi;v3=tata
OR
GET http://[...]/my_awesome_project/matrix_test_one/v1=toto
我有同样的错误信息:
出现意外错误(类型=错误请求,状态=400)。失踪 String 类型方法参数的矩阵变量“v2”
但是当我打电话时
GET http://[...]/my_awesome_project/matrix_test_one/v2=titi
OR
GET http://[...]/my_awesome_project/matrix_test_one/[anything except "v1=*"]
我有同样的错误信息:
出现意外错误(类型=错误请求,状态=400)。 字符串类型的方法参数缺少矩阵变量“v1”
所以 Spring 似乎可以获取矩阵变量的第一个元素,但随后停止。
所以我继续尝试第二个测试功能:
GET http://[...]/my_awesome_project/matrix_test_two/v1=toto;v2=titi;v3=tata
OR
GET http://[...]/my_awesome_project/matrix_test_two/v1=toto
返回:
{
"v1": "toto"
}
-
GET http://[...]/my_awesome_project/matrix_test_two/v2=titi;v1=toto;v3=tata
返回:
{
"v2": "titi"
}
所以这种行为似乎证实了我的恐惧。
你有没有看到我为了启用矩阵变量支持而遗漏的东西(可能与分号有关)?
【问题讨论】:
标签: java spring rest spring-mvc spring-web