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

时间:2017-06-11 17:54:06

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

我尝试在https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#equals(java.lang.Object)的帮助下使用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);

我的问题非常简单,但我自己找不到答案了Jetty HTTP client及其基类 -

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

Content-Type: application/json

然后我必须添加这一行:

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

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

1 个答案:

答案 0 :(得分:3)

有几点:

  • 是的,如果您未明确设置内容类型标头,则会根据selected内容提供商自动设置。

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

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

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