Spring MVC缺少矩阵变量

时间:2015-05-29 22:04:53

标签: java spring spring-mvc

我正在尝试使用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: - (

感谢您的回答!

2 个答案:

答案 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; } 个实例。