1

Ich versuche Firebase Cloud Messaging by Google mit Hilfe von Jetty HTTP client zu verwenden:Setzt StringContentProvider Content-Type-Header in HTTP-Anforderung?

ist
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); 

Meine Frage ist sehr einfach, aber ich konnte die mich noch nicht, indem man die StringContentProvider und seine Basisklassen finden beantworten -

Wenn ich brauche die Anforderung HTTP-Header für FCM zu setzen:

Content-Type: application/json 

dann muss ich die Zeile:

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

oder wird diese Klasse es schon für mich tun?

Antwort

2

Ein paar Punkte:

  • Ja, wenn Sie nicht Inhaltstyp-Header explizit festgelegt haben, wäre es Auto-Set, bezogen auf das selected Content Provider.

  • Standardmäßig legt der StringContentProvider Content-Type auf text/plain fest. Zum Überschreiben müssen Sie einen anderen Konstruktor verwenden:

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

  • Anfrage #setContent Methode Auto setzt Content-Type-Header auf den angegebenen Wert. Daher müssen Sie den Code nicht ändern.

+1

Verbesserte Formatierung. Verbesserungen dieser Antwort sind willkommen. –