Spring MVC 中的@ExceptionHandler可以对web的服务器端运行错误, 做统一的处理,使得http status code 从原本的500改成200,
并去执行用@ExceptionHandler注解的方法。 前提是实现了这个方法的Class被 那个访问的Controller 继承了。
首先定义这样一个统一异常处理类
ExceptionController.java
package com.foundjet.front.base.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import net.sf.json.JSONObject;
public abstract class ExceptionController {
@ExceptionHandler
public @ResponseBody String exceptionProcess(HttpServletRequest request, HttpServletResponse
response, RuntimeException ex) {
JSONObject json = new JSONObject();
json.put("isError", true);
json.put("msg", ex.getMessage());
return json.toString();
}
}
在需要进行统一处理的类中extends 这个class
package com.foundjet.front.client.controller;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.foundjet.back.customer.service.CustomerService;
import com.foundjet.front.base.controller.ExceptionController;
import com.foundjet.front.base.controller.LoginAuth;
import net.sf.json.JSONObject;
@RequestMapping("/auth/customer")
@Controller
@LoginAuth
public class CustomerController extends ExceptionController {
@Resource
private CustomerService customerService;
/**
*
* @param page 第几页,从1开始
* @param rows 每页多少记录的行数
* @return JSON String
*/
@RequestMapping("/querybypage")
@ResponseBody
public String QueryByPage(int page, int rows) {
//当为缺省值的时候进行赋值
int currentpage = ( page == 0) ? 1: page; //第几页
int pageSize = (rows == 0) ? 5: rows; //每页显示数量
int index = (currentpage - 1) * pageSize; //从第几条开始显示
JSONObject map = customerService.queryByPage(index, pageSize);
return map.toString();
}
@RequestMapping("/test")
public @ResponseBody Object test() {
JSONObject json = new JSONObject();
json.put("status", "success");
String str = null;
str.toString();
return json.toString();
}
}
其中重要的一行是
public class CustomerController extends ExceptionController
这样CustomController里的方法被访问的时候, 如有异常, 就会被exceptionProces()处理
绕过web.xml中如下配置
web.xml
<!-- 错误跳转页面 -->
<error-page>
<!-- 路径不正确 -->
<error-code>404</error-code>
<location>/WEB-INF/errorpage/404.jsp</location>
</error-page>
<error-page>
<!-- 没有访问权限,访问被禁止 -->
<error-code>405</error-code>
<location>/WEB-INF/errorpage/405.jsp</location>
</error-page>
<error-page>
<!-- 内部错误 -->
<error-code>500</error-code>
<location>/WEB-INF/errorpage/500.jsp</location>
</error-page>