2015-01-15 176 views
1

我只是一个新手到春天MVC下面是我的代码,当我尝试去bye我获得以下错误找不到@PathVariable [pathVars]在@RequestMapping Spring MVC的

Could not find @PathVariable [pathVars] in @RequestMapping Spring MVC 

以下是我的代码

package com.springapp.mvc; 

import org.springframework.stereotype.Controller; 
import org.springframework.ui.ModelMap; 
import org.springframework.web.bind.annotation.PathVariable; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.servlet.ModelAndView; 

import java.util.Map; 

@Controller 
public class HelloController { 
    @RequestMapping("/") 
    public String printWelcome(ModelMap model) { 
     model.addAttribute("message", "Hello world!"); 
     return "hello"; 
    } 
    @RequestMapping("/runThis/{bye}/{hye}") 
    public ModelAndView printBye(@PathVariable Map<String,String> pathVars) { 
     String Bye = pathVars.get("bye"); 
     String Hye = pathVars.get("hye"); 
     ModelAndView modelAndView = new ModelAndView(); 
     modelAndView.addObject("message", "you are"+Bye+ "AND Here COmes" +Hye+"!"); 
     return modelAndView; 
    } 
} 

EDIT Full Stack。

type Exception report 

message Request processing failed; nested exception is org.springframework.web.bind.annotation.support.HandlerMethodInvocationException: Failed to invoke handler method [public org.springframework.web.servlet.ModelAndView com.springapp.mvc.HelloController.printBye(java.util.Map)]; nested exception is java.lang.IllegalStateException: Could not find @PathVariable [pathVars] in @RequestMapping 

description The server encountered an internal error that prevented it from fulfilling this request. 

exception 

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.web.bind.annotation.support.HandlerMethodInvocationException: Failed to invoke handler method [public org.springframework.web.servlet.ModelAndView com.springapp.mvc.HelloController.printBye(java.util.Map)]; nested exception is java.lang.IllegalStateException: Could not find @PathVariable [pathVars] in @RequestMapping 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:723) 

root cause 

org.springframework.web.bind.annotation.support.HandlerMethodInvocationException: Failed to invoke handler method [public org.springframework.web.servlet.ModelAndView com.springapp.mvc.HelloController.printBye(java.util.Map)]; nested exception is java.lang.IllegalStateException: Could not find @PathVariable [pathVars] in @RequestMapping 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:180) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:723) 

root cause 

java.lang.IllegalStateException: Could not find @PathVariable [pathVars] in @RequestMapping 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker.resolvePathVariable(AnnotationMethodHandlerAdapter.java:859) 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolvePathVariable(HandlerMethodInvoker.java:710) 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:359) 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:170) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:723) 

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.43 logs. 
+2

您认为'@ PathVariable'的作用是什么? – 2015-01-15 18:39:20

+0

我假设路径变量用于将请求映射到受尊重的Action。我知道我的'pathVars'目前是空的,但即使我为他们制作了一些映射器,我仍然得到相同的错误。 – 2015-01-15 18:41:53

+1

不要假设。阅读[documentation](http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/PathVariable.html)。 – 2015-01-15 18:42:47

回答

0

当您的请求映射你表明你的URL有一个固定部分/runThis/和两个可变部分{bye}{hye}以及你希望他们被映射到你的方法的两个参数(如你不匹配的名字并不表示其他事情)。

但是在你的方法中,你声明了一个名为pathVars的参数。所以你的参数名称,类型和数量不匹配。这就是Spring MVC抱怨的。

所以,你想要的是:

@RequestMapping("/runThis/{bye}/{hye}") 
public ModelAndView printBye(@PathVariable String bye, @PathVariable String hye) { 
    ModelAndView modelAndView = new ModelAndView(); 
    modelAndView.addObject("message", "you are" + bye + "AND Here COmes" + hye + "!"); 
    return modelAndView; 
} 

它比你的代码更简单,更类型安全。并请阅读文档。这是一个非常基本的例子。

+1

如果方法参数是Map 或MultiValueMap ,那么地图会填充所有路径变量名称和值._ – 2015-01-15 18:55:21

+0

感谢快速响应队友,我是一个新手,我想问的是,我正在看一个教程,说。 '@PathVariable Map pathVars'可以处理参数化的URI请求。所以我想你错过了我想要达到的目标。 – 2015-01-15 18:56:41

+0

@SotiriosDelimanolis我知道你可以为地图分配请求参数和HTTP标头。它是否也适用于路径变量?你有没有参考文档? – Codo 2015-01-15 19:49:47

7

您在调度员servlet配置XML

或在春季使用

@EnableWebMvc标注在Spring配置类

更高版本需要<mvc:annotation-driven/>并请理解@EnableWebMvc由更换mvc:注释驱动

并确保您的xmlns正确

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xmlns:tx="http://www.springframework.org/schema/tx" 
xmlns:context="http://www.springframework.org/schema/context" 
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd 
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd  
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> 
0
在某些情况下

如果jspPageName在ModelAndView中(jspPageName)语句

指向不存在的页面,你会得到同样的错误

注意到我使用Spring MVC的4.2.4和JDK 8

1

取而代之的是在你的代码:

public ModelAndView printBye(@PathVariable Map<String,String> pathVars) { 

它改成这样:

public ModelAndView printBye(@RequestParam Map<String,String> pathVars) { 

这是因为@RequestParam用于处理传入参数的Map对象,而@PathVariable用于处理传递给参数的单个项目。以下是@PathVariable的示例:

public ModelAndView printBye(@PathVariable("bye") String Bye, @PathVariable("hye") String Hye) { 
相关问题