Я проделал следующую работу, чтобы показать разные сообщения для разных исключений. Думаю, этот трюк может вам помочь.
Я просто перенаправляю исключение с разными сообщениями каждый раз и показываю это сообщение на одном и том жеpage.
@ExceptionHandler(Exception.class)
public ModelAndView handleMyException(Exception exception) {
ModelAndView mv = new ModelAndView("redirect:errorMessage?error="+exception.getMessage());
return mv;
}
@RequestMapping(value="/errorMessage", method=RequestMethod.GET)
public ModelAndView handleMyExceptionOnRedirect(@RequestParamter("error") String error) {
ModelAndView mv = new ModelAndView("uncaughtException");
mv.addObject("error", error);
return mv;
}
Обновление:
Вы также можете использовать SimpleMappingExceptionResolver
, это может быть более полезно в вашем случае: вы можете просто сопоставить каждое исключение с каждой страницейи страница по умолчанию.
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="org.springframework.dao.DataAccessException">/general/error/500</prop>
<prop key="freemarker.core.InvalidReferenceException">/general/error/500</prop>
<prop key="NumberFormatException">/general/error/500</prop>
</props>
</property>
<property name="defaultErrorView" value="/general/error/500" />
</bean>
Update 2: I think you need to treat 404 separately.
<error-page>
<error-code>404</error-code>
<location>/WEB-INF/pages/404.jsp</location>
</error-page>