gpt4 book ai didi

Spring异常处理-如何同时使用ExceptionResolver和@ExceptionHandler

转载 作者:行者123 更新时间:2023-12-02 11:33:42 24 4
gpt4 key购买 nike

我开发了一个 Web 应用程序,其中表单验证异常应该由 @ExceptionHandler 处理(需要灵活),一般系统异常由 SimpleMappingExceptionResolver 处理(执行电子邮件通知等操作)。

问题是,如果我同时使用两者,为 @ExceptionHandler 映射的异常不会到达 @ExceptionHandler,而是被 ExceptionResolver 作为 defaultError 捕获。

知道如何才能使其协同工作吗?

@ExceptionHandler(ValidatorException.class)
public String handleFormException(ValidatorException ex, ActionRequest actionRequest) {
logger.error(ex.getMessage());
//TODO make conditions
return "mainOrderForm";
}
<小时/>
@ActionMapping(params = "action=addDocOrder")
public void addDocOrder(@ModelAttribute("order") CstOrderBeanImpl orderBean,
BindingResult result, ActionRequest actionRequest, ActionResponse response)
throws PortalException, SystemException, ValidatorException {
logger.info("Adding Form Order");
Calendar cal = TimeUtils.getEuDeadLine(orderBean);
orderBean.setDeadLine(cal.getTime());
ValidatorException ve = validateService.validate(orderBean, result, actionRequest, validator);
if (ve != null) throw ve;
(...)

在DispatcherPortlet中,有

catch (Exception ex) {
// Trigger after-completion for thrown exception.
triggerAfterActionCompletion(mappedHandler, interceptorIndex, processedRequest, response, ex);
(...)

它检查拦截器,但不存在,所以它执行默认...

我只是指出,这是 Portlet 环境,通常较少“ View ”......由参数驱动......

最佳答案

也许作为 ExceptionResolver 中的解决方法,您可以动态调用您选择的处理程序方法。

public ModelAndView resolveException(RenderRequest req, RenderResponse res, Object handler,Exception exc) {
if(exc instanceof ValidatorException) {
try {
java.lang.reflect.Method m = handler.getClass().getMethod("someMethod", (Class<?>)null /* method parameters? */);
m.invoke(handler,new Object[]{(ValidatorException)exc,req/*, res - maybe?*/});
} catch(Exception e) {
// Handle exception
}
}

// Send email of the error etc..
}

这不完全是一个优雅的解决方案,但应该可以工作..

关于Spring异常处理-如何同时使用ExceptionResolver和@ExceptionHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4251739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com