为什么tomcat影响spring404的捕获处理

@[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路径就可以了,指向你内部接口然后返回给前台。

404

/erro/404

然后在你的项目里面自定义/erro/404就可以拦截到404并返回json给前台了

@RestController

@RequestMapping("/erro")

public class ErroController {

// 登录

@PostMapping("/404")

public JSONObject notFound() {

return ResponseUtil.getMap(ResponseUtil.NOT_FOUND, "找不到", "");

}

以上只是简单的实例,并没有对异常分类捕获返回,可以自己玩~

你可能感兴趣的:(为什么tomcat影响spring404的捕获处理)