RequestMapping不使用多级URL

时间:2011-09-14 18:04:03

标签: spring spring-mvc

我有一个场景,我通过一个链接发出一个简单的get请求,而我的@RequestMapping配置的行为并不像我期望的那样。

在锚标记中,我引用了一个带有以下模式的网址'/ action-plan / export / pdf?token = xxx& taskId = 1111& taskId = 2222 ...'

在我的控制器类中,我在类级别有这个映射:

@RequestMapping("/action-plan/export")

此方法级别的映射

@RequestMapping(value="/pdf", method=RequestMethod.GET)
public String exportToPdf(@RequestParam("taskId") String[] taskIds,
            @RequestParam("token") String[] encryptedEmplId, ModelMap model)

但是每次我尝试这个时都会遇到404页面未找到错误以及以下Spring异常:

  

org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMethodException:找不到servlet请求的匹配处理程序方法:path'/ pdf',方法'GET',参数map ['taskId' - > array ['1962326','1962264','1962317','1962328','1962324','1962427','1962325','1962323','1963147','1962327','1962318','1962329', '1962330'],'令牌' - >阵列[ 'XXXX']]

我注意到当我删除“/ pdf?”时链接的一部分并从方法@RequestMapping中删除'value =“/ pdf”'它工作正常。对于我的生活,我不明白为什么将/ pdf添加到网址并且RequestMapping不起作用。

2 个答案:

答案 0 :(得分:1)

我认为danny.lesnik的答案非常接近,但我正在写自己的答案,所以我可能会更加冗长。

我正在研究一个不同的项目,并找出上述原因无效的原因。在我的原始问题中,这里是相关的web.xml servlet映射:

<servlet-mapping>
    <servlet-name>spring-dispatcherServlet</servlet-name>
    <url-pattern>/action-plan/export/*</url-pattern>
</servlet-mapping>

我注意到我在web.xml中包含的路径的任何部分都没有包含在RequestMapping值的评估中。我原以为这个bean配置会阻止这种情况(请注意“alwaysUseFullPath”属性):

<bean id="annotationHandlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
        <property name="order" value="2"/>
        <property name="alwaysUseFullPath" value="true"/>
</bean>

也许有人可以为我阐明这个细节。

无论如何,谢谢danny.lesnik

答案 1 :(得分:0)

我重新创建了你的问题并通过使用.action extentions映射servlet来解决它。

例如:

@Controller
@RequestMapping(value="/test")
public class DefaultController {

    @RequestMapping(value="/pdf.action", method=RequestMethod.GET)
    public ModelAndView indexView(@RequestParam("taskId") String[] taskIds,
            @RequestParam("token") String[] encryptedEmplId){
        ModelAndView mv = new ModelAndView("index");
    return mv;
    }

Spring XML映射:

<context:annotation-config />
<context:component-scan base-package="com.vanilla.controllers" />

<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>

和这个web.xml servlet映射

 <display-name>SpringMvcServlet</display-name>
   <servlet>
    <servlet-name>SpringMvcServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>SpringMvcServlet</servlet-name>
    <url-pattern>*.action</url-pattern>
  </servlet-mapping>

此代码解析此网址

/test/pdf.action?token=3&token=4&taskId=4

无瑕疵。