Как поймать и обработать org.springframework.web.portlet.bind.MissingPortletRequestParameterException - PullRequest
1 голос
/ 02 февраля 2011

Вот один из методов моего контроллера,

  @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 Ответ

3 голосов
/ 19 июля 2011

Вопрос несколько старый, но у меня была та же проблема (и этот вопрос поднимается довольно высоко в 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-параметр - это имя представления, которое должно быть отображено. Spring автоматически публикует исключение в представлении, по умолчанию вызывая переменную «исключение». На типичной настройке JSP, в которой у меня есть параметр view error / error-отсутствующий параметр, отображается в /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 отображается на представление в случае, если ни одно из исключенийMappings ниже не соответствует. Если вам это не нужно, вы можете пропустить это свойство.

...