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 设置为提供的值。因此,您无需对代码进行任何更改。
我正在尝试使用 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 设置为提供的值。因此,您无需对代码进行任何更改。