@[TOC](tomcat自动拦截404的处理)
spring的统一异常处理我们知道,使用@ControllerAdvice。最简单的直接拦截Exception,无论你throw出来的还是系统自动报的都可以自定义。
@ExceptionHandler(Exception.class)
@ResponseBody
public JSONObject exceptionHandler(Exception e) {
logger.info(getTrace(e));
System.out.println(e.getMessage());
return ResponseUtil.getMap(ResponseUtil.ERROR_CODE, e.getMessage(), "");
}
public static String getTrace(Throwable t) {
StringWriter stringWriter = new StringWriter();
PrintWriter writer = new PrintWriter(stringWriter);
t.printStackTrace(writer);
StringBuffer buffer = stringWriter.getBuffer();
return buffer.toString();
}
上面就是最简单的代码,如果我们使用java -jar的方式直接启动项目,还可以利用status来拦截404返回json给前台,但是问题来了,如果我们使用tomcat的时候,404在你的同意处理里面是拦截不了的。因为tomcat自己会定义404默认页面。
但是返回给前台的信息就不友好了,这时候我们其实可以在tomcat的web.xml里面直接配置404路径就可以了,指向你内部接口然后返回给前台。
<error-page>
<error-code>404</error-code>
<location>/erro/404</location>
</error-page>
然后在你的项目里面自定义/erro/404就可以拦截到404并返回json给前台了
@RestController
@RequestMapping("/erro")
public class ErroController {
// 登录
@PostMapping("/404")
public JSONObject notFound() {
return ResponseUtil.getMap(ResponseUtil.NOT_FOUND, "找不到", "");
}
以上只是简单的实例,并没有对异常分类捕获返回,可以自己玩~
网友评论