如何在Spring WebFlow中处理FlowException及格式错误异常并重定向
解决BadlyFormattedFlowExecutionKeyException异常的重定向处理
问题分析
BadlyFormattedFlowExecutionKeyException是Spring Web Flow处理无效流程执行Key时抛出的特定异常,虽继承自FlowException,但你当前配置的java.lang.Exception全局过渡未捕获到它——原因是该异常通常在流程执行的早期(解析执行Key阶段)抛出,此时Web Flow的全局过渡逻辑还未生效。
解决方案
方案1:添加特定异常的全局过渡(优先推荐)
在global-transitions中优先声明针对该异常的过渡规则,Web Flow会按配置顺序匹配异常,特定异常规则需要放在通用异常规则之前:
<global-transitions> <!-- 先匹配特定的Web Flow异常 --> <transition on-exception="org.springframework.webflow.execution.repository.support.BadlyFormattedFlowExecutionKeyException" to="invalid"/> <!-- 再匹配通用异常 --> <transition on-exception="java.lang.Exception" to="invalid"/> </global-transitions>
方案2:用Spring MVC全局异常处理器兜底
如果方案1仍未生效,说明异常发生在Web Flow流程启动前,此时需要借助Spring MVC的全局异常处理器捕获并处理:
import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.servlet.ModelAndView; import org.springframework.webflow.execution.repository.support.BadlyFormattedFlowExecutionKeyException; @ControllerAdvice public class GlobalMvcExceptionHandler { @ExceptionHandler(BadlyFormattedFlowExecutionKeyException.class) public ModelAndView handleInvalidFlowExecutionKey() { // 直接返回指定的error视图(替换成你实际的模板名称) return new ModelAndView("invalid"); } }
额外注意
确保invalid对应的视图模板已正确配置,能被项目的视图解析器(如Thymeleaf、JSP解析器)正常识别并渲染。
内容的提问来源于stack exchange,提问作者Parameshwar
相关产品推荐
相关产品推荐

