【问题标题】:Does StringContentProvider set Content-Type header in HTTP request?StringContentProvider 是否在 HTTP 请求中设置 Content-Type 标头?
【发布时间】:2017-11-13 04:38:54
【问题描述】:

我正在尝试在Jetty HTTP client 的帮助下使用Firebase Cloud Messaging by Google

public static final String FCM_URL = "https://fcm.googleapis.com/fcm/send";
public static final String FCM_KEY = "key=AAAA....";

private final HttpClient mHttpClient = new HttpClient();
private final CompleteListener mFcmListener = new CompleteListener() {
    @Override
    public void onComplete(Result result) {
        if (result.isFailed()) {
            // TODO delete FCM token in database for certain responses
        }
    }
};

mHttpClient.start();
mHttpClient.POST(FCM_URL)
    .header(HttpHeader.AUTHORIZATION, FCM_KEY)
    .content(new StringContentProvider(notificationStr), "application/json")
    .send(mFcmListener);

我的问题很简单,但通过查看StringContentProvider 及其基类,我自己还找不到答案 -

如果我需要为 FCM 设置请求 HTTP 标头:

Content-Type: application/json

那我是不是要加一行:

.header(HttpHeader.CONTENT_TYPE, "application/json")

或者那个班级已经为我做了?

【问题讨论】:

    标签: http-headers jetty firebase-cloud-messaging content-type jetty-9


    【解决方案1】:

    几点:

    • 是的,如果您没有明确设置内容类型标头,它将根据selected 内容提供程序自动设置。

    • 默认情况下,StringContentProvider 将 Content-Type 设置为 text/plain。要覆盖,您需要使用另一个构造函数 -

      new StringContentProvider("application/json", content, StandardCharsets.UTF_8);

    • Request #setContent 方法自动将 Content-Type 标头设置为提供的值。因此,您无需对代码进行任何更改。

    【讨论】:

    • 改进的格式。欢迎对此答案进行任何改进。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 2012-05-27
    相关资源
    最近更新 更多