详细参考博文
guava限流器RateLimiter使用简介(Springboot实现)_guava ratelimiter-CSDN博客
补充类:
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Slf4j
public class WebUtils {
private static ObjectMapper objectMapper = new ObjectMapper();
/**
* 向客户端输出JSON字符串
*
* @param response HttpServletResponse
* @param object 输出的数据
*/
@SneakyThrows
public static void writeJson(HttpServletResponse response, Object object) {
writeData(response, objectMapper.writeValueAsString(object), MediaType.APPLICATION_JSON_VALUE);
}
/**
* 客户端返回字符串
*
* @param response HttpServletResponse
* @param data 需要返回的数据
*/
public static void writeData(HttpServletResponse response, String data, String type) {
try {
response.setContentType(type);
response.setCharacterEncoding("utf-8");
response.getWriter().print(data);
response.getWriter().flush();
response.getWriter().close();
} catch (IOException e) {
log.error("writeData error", e);
}
}
}
public enum ReturnCode {
/**
* 操作成功
**/
RC100(100, "操作成功"),
/**
* 操作失败
**/
RC999(999, "操作失败"),
/**
* 服务限流
**/
LIMIT_ERROR(2001, "系统繁忙,请稍后再试!"),
/**
* 服务异常
**/
RC500(500, "系统异常,请稍后重试"),
ILLEGAL_ARGUMENT(3001, "非法参数"),
ILLEGAL_HEADER(4001, "非法请求头,请添加合适的签名"),
REPLAY_ERROR(4002, "访问已过期,请重新访问!"),
ARGUMENT_ERROR(4003, "您正在尝试恶意访问,已记录IP备案!");
/**
* 自定义状态码
**/
private final int code;
/**
* 自定义描述
**/
private final String message;
ReturnCode(int code, String message) {
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public String getMessage() {
return message;
}
}
import lombok.Data;
@Data
public class ResultData<T> {
/**
* 结果状态 ,具体状态码参见ResultData.java
*/
private int status;
/**
* 响应消息
**/
private String message;
/**
* 响应数据
**/
private T data;
/**
* 接口请求时间
**/
private long timestamp;
public ResultData() {
this.timestamp = System.currentTimeMillis();
}
public static <T> ResultData<T> success(String message) {
ResultData<T> resultData = new ResultData<>();
resultData.setStatus(ReturnCode.RC100.getCode());
resultData.setMessage(message);
return resultData;
}
public static <T> ResultData<T> success() {
ResultData<T> resultData = new ResultData<>();
resultData.setStatus(ReturnCode.RC100.getCode());
resultData.setMessage(ReturnCode.RC100.getMessage());
return resultData;
}
public static <T> ResultData<T> success(T data) {
ResultData<T> resultData = new ResultData<>();
resultData.setStatus(ReturnCode.RC100.getCode());
resultData.setMessage(ReturnCode.RC100.getMessage());
resultData.setData(data);
return resultData;
}
public static <T> ResultData<T> fail(String message) {
ResultData<T> resultData = new ResultData<>();
resultData.setStatus(ReturnCode.RC999.getCode());
resultData.setMessage(message);
return resultData;
}
public static <T> ResultData<T> fail(int code, String message) {
ResultData<T> resultData = new ResultData<>();
resultData.setStatus(code);
resultData.setMessage(message);
return resultData;
}
}