我已经配置了API速率限制使用Spring Boot Bucket4j starter(bucket4j-spring-boot-starter
)与ehcache。当速率限制超过时,它返回429响应,并带有以下消息,但我想动态自定义响应体。假设我想在响应中添加时间戳。我该怎么做呢?我在application.properties
文件中设置响应体:
bucket4j.filters[0].http-response-body={ "status": 429, "error": "Too Many Requests", "message": "API rate limit exceeded" }
直到当前的入门版本v0.5.2,似乎还不支持动态自定义响应体。在过滤器源代码(https://github.com/MarcGiffing/bucket4j-spring-boot-starter/blob/master/bucket4j-spring-boot-starter/src/main/java/com/giffing/bucket4j/spring/boot/starter/filter/servlet/ServletRequestFilter.java)中,您可以看到响应体似乎仅由配置决定。而且他们没有使用异常。
但是仍然有一个稍微棘手的方法可以发送动态响应体。
- 将响应体设置为空字符串
- 创建一个比bucket4j更高阶的过滤器,并检查状态码是否为429。如果是,创建您自己的响应体并附加到写入器。
*如果需要,你也可以在过滤器中设置一些标题。
速率限制器只是抛出通常的异常,这意味着您可以添加自己的自定义错误消息处理程序,并根据需要在此处理程序中重写响应。点击这里查看更多信息