本项目主要介绍Spring返回结果压缩的使用姿势
- 压缩配置
server:
compression:
enabled: true # 开启支持gzip压缩
min-response-size: 128 # 当响应长度超过128时,才执行压缩
- 返回JsonObject无效场景
当接口返回的是 application/json 时,上面配置的 min-response-size 无效,全部都走压缩,原因是因为无法计算 content-length,可行的解决方案:
- 设置统一的Filter, 通过
ContentCachingResponseWrapper
包装返回结果 -> 见:Application中的配置
- 返回压缩的静态资源
public class Application implements WebMvcConfigurer {
/**
* 配置返回的静态资源的压缩与缓存方式
*
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**")
.addResourceLocations("classpath:/static/")
.setCacheControl(CacheControl.maxAge(7, TimeUnit.DAYS).cachePrivate())
.resourceChain(true)
// https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/reactive/resource/EncodedResourceResolver.html
.addResolver(new EncodedResourceResolver())
.addResolver(new VersionResourceResolver().addContentVersionStrategy("/**"));
}
}
上面配置了静态资源文件的缓存策略,压缩方式,需要注意 EncodedResourceResolver 需要在 VersionResourceResolver 之前(上面Spring的连接说明)
本项目对应的博文内容为