我正在尝试使用SpringMVC(来自Spring boot 1.2.3.RELEASE)向我的Rest Controller添加一个矩阵参数(或矩阵变量) 这是我的代码:
@RestController
public class SubAgentsController {
@RequestMapping(value = "/{subagents}", method = RequestMethod.GET)
public SubAgent subAgents(@MatrixVariable(value="agentName", pathVar="subagents") String agentName) {
System.out.println(agentName);
}
}
不幸的是,当我试图获得: http://localhost:8080/subagents;agentName=hello
这是我收到的答案:
出现意外错误(type = Bad Request,status = 400)。
缺少类型为String
的方法参数的矩阵变量'agentName'
我做错了什么?根据应该起作用的http://docs.spring.io/spring-framework/docs/3.2.0.M2/reference/html/mvc.html: - (
感谢您的回答!
答案 0 :(得分:3)
在SpringBoot应用程序中为了启用Matrix变量,您需要在下面定义覆盖代码
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
UrlPathHelper urlPathHelper = new UrlPathHelper();
urlPathHelper.setRemoveSemicolonContent(false);
configurer.setUrlPathHelper(urlPathHelper);
}
}
否则,默认情况下它们被禁用
答案 1 :(得分:2)
作为链接到州的文档,
请注意,要启用矩阵变量,必须设置
removeSemicolonContent
的{{1}}属性RequestMappingHandlerMapping
。默认情况下,它设置为false
,但MVC除外 命名空间和MVC Java配置都自动启用 矩阵变量的使用。
如果您通过扩展true
来配置应用程序,则覆盖准备WebMvcConfigurationSupport
的{{1}}方法并设置其相应的属性。
requestMappingHandlerMapping
然后你就可以了。
使用Spring Boot,我认为您需要的是使用上述方法声明RequestMappingHandlerMapping
方法,即。返回@Override
public RequestMappingHandlerMapping requestMappingHandlerMapping() {
final RequestMappingHandlerMapping requestMappingHandlerMapping = super.requestMappingHandlerMapping();
requestMappingHandlerMapping.setRemoveSemicolonContent(false); // <<< this
return requestMappingHandlerMapping;
}
个实例。