我正在使用Spring 3.2.6,以通过一个基本示例来学习@MatrixVariable功能。
我已经对该方法进行了编码,以从URI中获取矩阵变量:
@RequestMapping(value="/matrix/{paths}", method=RequestMethod.GET)
public ModelAndView MatrixVariableExample(@MatrixVariable Integer age){
ModelAndView mv = new ModelAndView("affichageMatrix");
mv.addObject("age", age);
return mv;
}
我使用此URI:localhost:8080 / SpringMVC-Maven / matrix / user; age = 23
为age变量返回的值为null,但我应该为23
在弹簧配置文件中启用矩阵变量:
<mvc:annotation-driven enable-matrix-variables="true"/>
尝试像这样更改您的代码:
@RequestMapping(value="/matrix/{paths}", method=RequestMethod.GET)
public ModelAndView MatrixVariableExample(@PathVariable String paths, @MatrixVariable Integer age){
System.out.println(paths); //or do something with it, at your choice
ModelAndView mv = new ModelAndView("affichageMatrix");
mv.addObject("age", age);
return mv;
}
并使用URL:
http://localhost:8080/SpringMVC-Maven/matrix/user;age=23
您的变量paths
现在应包含字符串user
,并且age
应该为23
。我想如果您已经参数化了请求映射,就不能错过路径参数。
要使用矩阵变量,您必须启用Spring MVC框架以在您的应用程序中读取矩阵变量。您可以使用XML表示法或通过Java配置来完成此操作
XML配置:通过在dispatcher-servlet.xml中添加以下配置]
<mvc:annotation-driven enable-matrix-variables="true"/>
Java配置:
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] {AppConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return null;
}
@Override
protected String[] getServletMappings() {
return new String[] {"/*"};
}}
@Configuration
@EnableWebMvc
@ComponentScan(basePackages= {"com.springmvc.test"})
public class AppConfig implements WebMvcConfigurer {
@Bean
public InternalResourceViewResolver resolver() {
InternalResourceViewResolver resolver=new InternalResourceViewResolver();
resolver.setViewClass(JstlView.class);
resolver.setPrefix("/jsp/");
resolver.setSuffix(".jsp");
return resolver;
}
public void configurePathMatch(PathMatchConfigurer configurer) {
UrlPathHelper urlPathHelper=new UrlPathHelper();
urlPathHelper.setRemoveSemicolonContent(false);
configurer.setUrlPathHelper(urlPathHelper);
}}