SpringDoc OpenApi v3响应头时区设置:如何将GMT时间调整为UTC+3
SpringDoc OpenApi v3 响应头时区调整为UTC+3的解决方案
方案1:全局设置JVM默认时区(全局生效,配置最简单)
直接在项目启动类的main方法最顶部添加时区设置代码即可:
public static void main(String[] args) { // 全局设置默认时区为UTC+3 TimeZone.setDefault(TimeZone.getTimeZone("GMT+3")); SpringApplication.run(Application.class, args); }
该配置会对所有Spring组件、Jackson序列化逻辑、容器生成的默认响应头统一生效。
方案2:Spring Boot配置文件调整(针对返回体时间序列化场景)
如果是接口返回体中的时间字段时区不符合预期,可在application.yml或application.properties中添加Jackson配置:
spring: jackson: time-zone: GMT+3 date-format: yyyy-MM-dd HH:mm:ss # 可根据业务需求自定义时间格式
方案3:自定义过滤器强制修改响应头(针对HTTP标准Date头修改场景)
如果需要强制覆盖容器默认生成的GMT时区Date响应头,可实现自定义过滤器:
import javax.servlet.*; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import java.util.TimeZone; @Component public class CustomTimeZoneHeaderFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletResponse httpResp = (HttpServletResponse) response; chain.doFilter(request, response); // 时间格式符合HTTP响应头规范 SimpleDateFormat dateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.US); dateFormat.setTimeZone(TimeZone.getTimeZone("GMT+3")); httpResp.setHeader("Date", dateFormat.format(new Date())); } }
注意:HTTP协议标准规定
Date响应头必须使用GMT(UTC)时区,强制修改可能导致部分HTTP客户端解析异常。如果是业务场景需要返回UTC+3时间,建议使用自定义响应头如X-Biz-Response-Time存放,避免兼容问题。
内容的提问来源于stack exchange,提问作者Maksym Rybalkin
相关产品推荐
相关产品推荐

