1.在spring-mvc.xml中增加配置:
比如我的freemarker视图定义的是:/WEB-INF/template
我的页面则放在template下的common目录下,所以下方定义的是common/500,文件扩展名根据视图定义可以忽略
<mvc:annotation-driven />
<!--全局异常输出 -->
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.Exception">common/500</prop>
</props>
</property>
<property name="statusCodes">
<props>
<prop key="common/500">500</prop>
</props>
</property>
<!-- 设置日志输出级别,不定义则默认不输出警告等错误日志信息 -->
<property name="warnLogCategory" value="WARN"></property>
<!-- 默认错误页面,当找不到上面mappings中指定的异常对应视图时,使用本默认配置 -->
<property name="defaultErrorView" value="common/500"></property>
<!-- 默认HTTP状态码 -->
<property name="defaultStatusCode" value="500"></property>
</bean>
2.配置界面返回
根据自己的页面视图,在对应目录下增加文件,这里我采用的是freemarker,返回标准的json串
"code": 500,
"msg": "系统异常,请联系管理员",
"data": {
<#assign errs=Request["exception"].getStackTrace()![]>
<#list errs as err>
<#assign className=Request["exception"].getStackTrace()[err_index].getClassName()!"">
<#if className?contains("Controller") || className?contains("Service")>
"Exception Type":"${Request["exception"].getClass()}",
"Class Path":"${Request["exception"].getStackTrace()[err_index].getClassName()!""}",
"Class Name":"${Request["exception"].getStackTrace()[err_index].getFileName()!""}",
"Error Line":"${Request["exception"].getStackTrace()[err_index].getLineNumber()!""}",
"Method Name":"${Request["exception"].getStackTrace()[err_index].getMethodName()!""}",
"-----------------------------------------------------------------------",
<br/>
</#if>
</#list>
}
}
3.效果图
{
"code": 500,
"msg": "系统异常,请联系管理员",
"data": {
"Exception Type": "class java.lang.NullPointerException",
"Class Path": "com.aliyun.web.user.UserController",
"Class Name": "UserController.java",
"Error Line": "57",
"Method Name": "queryList",
"-----------------------------------------------------------------------",
}
}