为了能根据不同的情况做出不同的反应,我们可以让不同的情况抛出异常。
Spring里提供了HandlerExceptionResolver类来捕获异常。
下面 以代码作说明
1.首先抛出异常
if (meeting.getNeedExpert().size() == 0
|| meeting.getProject().size() == 0) {
throw new NoExpertException("此会议还没有专家");
}
我们自己定义了一个异常类为NoExpertException。
public class NoExpertException extends IllegalStateException {
private static final long serialVersionUID = 0L;
public NoExpertException() {
}
public NoExpertException(String s) {
super(s);
}
}
2.配置异常解析器
<bean id="noExpertExceptionResolver"
class="com.itware.lxgl.workflow.exception.NoExpertExceptionResolver">
<property name="order">
<value>1</value>
</property>
<property name="exceptionView">
<value>exception/noExpertException</value>
</property>
<property name="backUrl">
<value>/home/todoList.htm</value>
</property>
<property name="backMsgKey">
<value>返回</value>
</property>
</bean>
3.编写解析器代码
public class NoExpertExceptionResolver implements Ordered,
HandlerExceptionResolver {
private int order;
private String exceptionView;
private String backUrl = "/";
private String backMsgKey;
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
if (ex instanceof NoExpertException) {
String errorMessage = ex.getMessage();
Map model = new HashMap();
model.put("backUrl", backUrl);
model.put("backMsgKey", backMsgKey);
model.put("errorMessage", errorMessage);
return new ModelAndView(exceptionView, model);
}
return null;
}
public int getOrder() {
return 0;
}
public void setOrder(int order) {
this.order = order;
}
public void setExceptionView(String exceptionView) {
this.exceptionView = exceptionView;
}
public void setBackUrl(String backUrl) {
this.backUrl = backUrl;
}
public void setBackMsgKey(String backMsgKey) {
this.backMsgKey = backMsgKey;
}
}
继承HandlerExceptionResolver以捕获异常,进行处理。!