sentinel自定義異常處理
阿新 • • 發佈:2020-09-07
package com.huqi.exception; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration; import org.springframework.context.annotation.Configuration; import com.alibaba.csp.sentinel.adapter.servlet.callback.UrlBlockHandler;import com.alibaba.csp.sentinel.slots.block.BlockException; import com.alibaba.csp.sentinel.slots.block.authority.AuthorityException; import com.alibaba.csp.sentinel.slots.block.degrade.DegradeException; import com.alibaba.csp.sentinel.slots.block.flow.FlowException; import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowException;import com.alibaba.csp.sentinel.slots.system.SystemBlockException; import com.fasterxml.jackson.core.JsonFactory; import com.google.gson.Gson; import io.netty.handler.codec.json.JsonObjectDecoder; @Configuration public class SentinelException implements UrlBlockHandler { @Override public voidblocked(HttpServletRequest request, HttpServletResponse response, BlockException e) throws IOException { MyResponse errorResponse = new MyResponse(); // 不同的異常返回不同的提示語 if (e instanceof FlowException) { errorResponse.setMsg("被限流了"); errorResponse.setStatus(1); } else if (e instanceof DegradeException) { errorResponse.setMsg("服務降級了"); errorResponse.setStatus(2); } else if (e instanceof ParamFlowException) { errorResponse.setMsg("被限流了"); errorResponse.setStatus(3); } else if (e instanceof SystemBlockException) { errorResponse.setMsg("被系統保護了"); errorResponse.setStatus(4); } else if (e instanceof AuthorityException) { errorResponse.setMsg("被授權了"); errorResponse.setStatus(5); } response.setStatus(500); response.setCharacterEncoding("utf-8"); response.getWriter().print(new Gson().toJson(errorResponse)); } } /** * 簡單的響應結構體 */ class MyResponse { private Integer status; private String msg; public Integer getStatus() { return status; } public static Object builder() { // TODO Auto-generated method stub return null; } public void setStatus(Integer status) { this.status = status; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }