StringContentProvider 是否在 HTTP 请求中设置 Content-Type header?

Does StringContentProvider set Content-Type header in HTTP request?

我正在尝试使用 Firebase Cloud Messaging by Google with the help of Jetty HTTP client:

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 及其基数 classes -

我自己还找不到答案

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

Content-Type: application/json

那么我是否必须添加以下行:

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

或者 class 已经为我完成了吗?

几点:

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

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

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

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