第一种方式:
package com.dsc.web;
import org.apache.log4j.Logger;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.servlet.ModelAndView;
@ControllerAdvice
public class ErrorControllerAdvice {
protected static Logger logger = Logger.getLogger(ErrorControllerAdvice.class);
@ExceptionHandler(value = Exception.class)s
public ModelAndView processUnauthenticatedException(Exception exception) {
System.out.println("********************************** 异常 ****************************************");
ModelAndView model = new ModelAndView("error/error");
model.addObject("message", "****** " + exception.getMessage());
return model;
}
}
若出现:
No suitable resolver for argument [0] for MethodArgumentNotValidException
异常,则有可能表示processUnauthenticatedException()方法的中某些参数不支持,要去掉。
第二种方式:
将Controller抛出的异常转到特定View, 保持SiteMesh的装饰效果
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.Throwable">error/500</prop>
</props>
</property>
</bean>
这两个异常处理,不能处理404异常(地址无效),则可以在web.xml配置如下:
<!-- 通过错误码配置error-page -->
<error-page>
<error-code>404</error-code>
<location>/WEB-INF/jsp/error/404.jsp</location>
</error-page>
其实在web.xml也可以配置其他的异常,例如500等其它异常。
<pre name="code" class="html"> <!-- 通过异常的类型配置error-page -->
<error-page>
<exception-type>java.lang.NullException</exception-type>
<location>/error.jsp</location>
</error-page>