Будьте осторожны, чтобы включить средства разрешения исключений по умолчанию, если вы включаете свои собственные. Если вы используете аннотированные обработчики @Exception, вам необходимо явно загрузить их, иначе они больше не будут работать.
В этом случае FooBarHandlerExceptionResolver расширяет DefaultHandlerExceptionResolver и предоставляет метод, который распознаватель по умолчанию не охватывает. Это позволяет FooBarHandlerExceptionResolver обрабатывать исключения уровня класса, которые я не смог отловить с помощью аннотированных методов-обработчиков @Exception.
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver">
<property name="order" value="1"/>
</bean>
<bean class="org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver" >
<property name="order" value="2"/>
</bean>
<bean class="com.company.package.foo.FooBarHandlerExceptionResolver">
<property name="order" value="3"/>
</bean>
Вот решатель исключений
public class FooBarHandlerExceptionResolver extends DefaultHandlerExceptionResolver {
@Override
protected ModelAndView doResolveException(HttpServletRequest request,
HttpServletResponse response,
Object handler,
Exception ex) {
try {
if (ex instanceof UnsatisfiedServletRequestParameterException) {
return handleUnsatisfiedServletRequestParameter((UnsatisfiedServletRequestParameterException) ex, request, response,
handler);
}else {
super.doResolveException(request,response,handler,ex);
}
}
catch(Exception handlerException){
logger.warn("Handling of [" + ex.getClass().getName() + "] resulted in Exception", handlerException);
}
return null;
}
protected ModelAndView handleUnsatisfiedServletRequestParameter(UnsatisfiedServletRequestParameterException ex,
HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
logger.warn(ex.getMessage());
return new ModelAndView("blank", new ModelMap("reason", ex.getMessage()));
}
}