spring boot 项目在Filter中抛出异常,使用@ControllerAdvice+@ExceptionHandler无法处理,处理方法如下:
自己创建Controller继承BasicErrorController,具体实现
@RestController
@Api(value = "filter错误处理", description = "filter错误处理")
public class ErrorController extends BasicErrorController {
public ErrorController() {
super(new DefaultErrorAttributes(), new ErrorProperties());
}
@RequestMapping(produces = {MediaType.APPLICATION_JSON_VALUE})
public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
Map<String, Object> body = getErrorAttributes(request, isIncludeStackTrace(request, MediaType.ALL));
HttpStatus status = getStatus(request);
//自定义的错误信息类
//status.value():错误代码,
//body.get("message").toString()错误信息
R ret = R.error(status.value(), body.get("message").toString());
//TokenException Filter抛出的自定义错误类
if (!Strings.isNullOrEmpty((String) body.get("exception")) && body.get("exception").equals(TokenException.class.getName())) {
body.put("status", HttpStatus.FORBIDDEN.value());
status = HttpStatus.FORBIDDEN;
}
return new ResponseEntity<Map<String, Object>>(ret, status);
}
@Override
public String getErrorPath() {
return "error/error";
}
}