【问题标题】:@MatrixVariable Spring 3.2 return Null@MatrixVariable Spring 3.2 返回 Null
【发布时间】:2014-05-03 21:15:20
【问题描述】:

我正在使用 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

【问题讨论】:

    标签: java spring maven spring-mvc url-routing


    【解决方案1】:

    在 spring 配置文件中启用 矩阵变量

    <mvc:annotation-driven enable-matrix-variables="true"/>
    

    【讨论】:

      【解决方案2】:

      尝试像这样更改您的代码:

      @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;
      }
      

      并使用网址:

      http://localhost:8080/SpringMVC-Maven/matrix/user;age=23
      

      您的变量paths 现在应该包含字符串user,而age 应该是23。如果您已经对请求映射进行了参数化,我想您不允许错过路径参数。

      【讨论】:

      • @user3600061 一些问题: 1)你真的输入方法(可以通过调试器检查)? 2)变量paths是什么?
      • 是的,返回路径值:paths = user
      • 好吧,我还有两个猜测:Spring 教程中的原始示例使用了int,而不是Integer。这不太重要,但仍然值得尝试。第二:您可能要指定路径和矩阵变量名称:@MatrixVariable(value="age", pathVar="paths")
      【解决方案3】:

      要使用矩阵变量,您必须启用 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);
      }}
      

      【讨论】:

        猜你喜欢
        • 2012-12-01
        • 2014-05-20
        • 1970-01-01
        • 1970-01-01
        • 2016-07-24
        • 2013-07-02
        • 2020-03-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多