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 void blocked(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;
}
}