Sentinel的五种类型规则在触发规则保护时,返回的异常页面是一样的,不好区分是因为哪种规则导致的异常。所以需要自定义异常返回信息,明确是触发了哪种类型的规则。
@Component
public class ExceptionHandlerPage implements UrlBlockHandler {
@Override
public void blocked(HttpServletRequest request, HttpServletResponse response, BlockException e) throws IOException {
response.setContentType("application/json;charset=utf-8");
Result responseData = null;
//BlockException 异常接口,包含Sentinel的五个异常
// FlowException 限流异常
// DegradeException 降级异常
// ParamFlowException 参数限流异常
// AuthorityException 授权异常
// SystemBlockException 系统负载异常
if (e instanceof FlowException) {
responseData = Result.getFailResult(410, "接口被限流了...");
} else if (e instanceof DegradeException) {
responseData = Result.getFailResult(420, "接口被降级了...");
} else if (e instanceof ParamFlowException) {
responseData = Result.getFailResult(430, "参数限流异常...");
} else if (e instanceof AuthorityException) {
responseData = Result.getFailResult(440, "授权异常...");
} else if (e instanceof SystemBlockException) {
responseData = Result.getFailResult(450, "系统负载异常...");
}
response.getWriter().write(JSON.toJSONString(responseData));
}
}