在springmvc作控制层的应用中,我们在接收客户端的ajax请求时候,正常是返回json数据,当service层抛出异常时候,我们希望给前台返回的是格式统一的json,这时候就可以用到全局异常处理器,规范controller层的编写。
配置起来也特别简单
一 、 在springmvc 扫描包里配置下面的类
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.MediaType;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
public class DefaultExceptionHandler implements HandlerExceptionResolver {
private static Logger log = LoggerFactory.getLogger(DefaultExceptionHandler.class);
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
ModelAndView mv = new ModelAndView();
response.setStatus(500);
response.setContentType(MediaType.APPLICATION_JSON_VALUE);
response.setCharacterEncoding("UTF-8");
response.setHeader("Cache-Control", "no-cache, must-revalidate");
try {
response.getWriter().write("{\"success\":-1,\"msg\":\"" + ex.getMessage() + "\"}");
} catch (IOException e) {
log.error("与客户端通讯异常:"+ e.getMessage(), e);
}
log.debug("异常:" + ex.getMessage(), ex);
return mv;
}
}
二 、 在springmvc的配置文件中配置
<bean id="exceptionHandler" class="cn.ssm.core.controller.DefaultExceptionHandler" />