You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在请求头中为Microsoft Graph API指定首选时区?

解决Microsoft Graph API中Prefer头时区解析错误的问题

错误原因分析

你遇到的解析HTTP头'Prefer'时发生错误,核心问题是时区名称里的空格没有被正确处理。Microsoft Graph的Prefer头规则要求:如果outlook.timezone的值包含空格等特殊字符,必须用双引号将整个时区名称包裹起来,否则解析器会把空格当成非法分隔符(错误提示里的位置25就是Pacific Standard Time中Standard后的空格)。

正确的Prefer头格式

把时区名称用双引号包裹,正确的头值应该是:

Prefer: outlook.timezone="Pacific Standard Time"

另外还有更稳妥的替代方案:使用无空格的IANA时区ID(比如America/Los_Angeles对应太平洋标准时间),这样不需要引号也能正常解析:

Prefer: outlook.timezone=America/Los_Angeles

Retrofit + Spring中的实现示例

在你的Retrofit接口定义中,直接传递格式化后的Prefer头即可:

1. 定义Retrofit接口

import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Header;
import retrofit2.http.POST;

public interface GraphCalendarApi {
    @POST("/v1.0/me/events")
    Call<CalendarEvent> createCalendarEvent(
        // 传递Prefer请求头
        @Header("Prefer") String preferHeader,
        // 事件请求体
        @Body CalendarEvent event
    );
}

2. 调用接口时传入正确的头值

// 方式1:带引号的友好时区名称
String preferHeaderWithQuotes = "outlook.timezone=\"Pacific Standard Time\"";
graphCalendarApi.createCalendarEvent(preferHeaderWithQuotes, yourEventObject);

// 方式2:使用IANA时区ID(推荐,避免空格问题)
String preferHeaderIana = "outlook.timezone=America/Los_Angeles";
graphCalendarApi.createCalendarEvent(preferHeaderIana, yourEventObject);

额外注意点

  • 确保你的Retrofit客户端没有自动对请求头进行不当编码(比如转义双引号),如果用Spring的RestTemplate,写法类似,也是在请求头中添加正确格式的Prefer值。
  • 可以在Microsoft Graph文档中确认支持的时区格式,IANA时区ID的兼容性更强,不容易出现解析问题。

内容的提问来源于stack exchange,提问作者Paras

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:41:10