如何捕获和处理org.springframework.web.portlet.bind.MissingPortletRequestParameterException

时间:2011-02-02 05:39:42

标签: spring spring-mvc portlet

这是我的控制器方法之一,

  @ResourceMapping(value="petPortalAction")
  @RequestMapping(params={"transactionType=BUY_PET"})
  public String handlePetPurchaseAction(
                    @RequestParam(required=true, value="petId") String petId, 
                    PortletRequest request,
                    Model model)
  {
  ... 
  }

如您所见,参数petId是必需的请求参数。 如果请求中缺少它,将引发org.springframework.web.portlet.bind.MissingPortletRequestParameterException。

我的问题是如何捕获和处理这个异常...春天有没有可以使用的听众?

提前致谢。

1 个答案:

答案 0 :(得分:3)

这个问题有些陈旧,但我遇到了同样的问题(这个问题在Google上出现的很高;-))。所以这就是我所做的: 我将以下内容添加到applicationContext.xml:

<bean id="defaultExceptionHandlerTemplate" class="org.springframework.web.portlet.handler.SimpleMappingExceptionResolver" abstract="true">
    <property name="defaultErrorView" value="error/error-exception-default" />
    <property name="exceptionMappings">
        <props>
            <prop key="org.springframework.web.portlet.bind.MissingPortletRequestParameterException">
                error/error-missing-parameter
            </prop>
        </props>
    </property>
</bean>

<bean id="defaultExceptionHandler" parent="defaultExceptionHandlerTemplate" />

error / error-missing-parameter是要显示的视图的名称。 Spring会自动将异常发布到视图,默认情况下调用变量“exception”。在典型的JSP设置中,我将视图错误/错误缺失参数映射到/WEB-INF/jsp/error/error-missing-parameter.jsp,具体取决于您的视图解析程序配置。例如,此文件可能如下所示:

<jsp:root version="2.0"
    xmlns:jsp="http://java.sun.com/JSP/Page"
    xmlns:c="urn:jsptld:http://java.sun.com/jsp/jstl/core">

    <h1>Missing parameter</h1>
    <p>Error: The parameter '<c:out value="${exception.parameterName}" />' of type '<c:out value="${exception.parameterType}" />' is missing.</p>
</jsp:root>

属性“defaultErrorView”映射到视图,以防下面的所有exceptionMappings都不匹配。如果您不需要,可以跳过此属性。