Пользовательская динамическая страница ошибок с фреймворком Spring

Я хотел бы, чтобы мое приложение отображало пользовательскую страницу ошибки при возникновении исключения. Ответ, содержащий страницу, должен иметь правильный статус HTTP и содержать сообщение об исключении и, возможно, другие данные из объекта исключения.

Я уже пробовал 2 подхода, и ни один из них не работает:

1) Возврат ModelAndView из подкласса AbstractHandlerExceptionResolver - я могу создать любую страницу с ошибкой, которую захочу, но она будет обслуживаться с HTTP-статусом 200 OK.

2) Указание страницы ошибки в web.xml - не могу найти способ получить доступ к исключению.

Хорошо, решил. На самом деле оказалось довольно легко. Я использовал HttpServletResponse.setStatus. Обратите внимание, что использование sendError работает неправильно.


person Wojciech Budniak    schedule 30.04.2013    source источник


Ответы (2)


вы можете настроить SimpleMappingExceptionResolver

<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="defaultStatusCode" value="500" />
        <property name="defaultErrorView" value="error/500" />
        <property name="exceptionMappings">
            <props>
                <prop key="java.lang.Exception">error/500</prop>
                <prop key="SomeOtherException">error/custom</prop>
            </props>
        </property>
        <property name="statusCodes">
            <props>
                <prop key="error/500">500</prop>
                <prop key="error/custom">404</prop>
            </props>
        </property>
        <property name="order" value="0" />
    </bean>

и настройте страницу ошибки 404 в web.xml (сервлет диспетчера Spring возвращает код состояния 404, если сопоставление не найдено)

в вашем jsp вы можете получить доступ к исключениям следующим образом

${exception}
person marco.eig    schedule 30.04.2013

Либо

person Sean Patrick Floyd    schedule 30.04.2013
comment
@ ExceptionHandler работает только для каждого контроллера, а страница с ошибкой не позволяет мне возиться с Exception - person Wojciech Budniak; 30.04.2013