我有一个场景,我通过一个链接发出一个简单的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不起作用。
答案 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
无瑕疵。