Frage

Ich versuche, eine Kopfantwort mit Restlet zu erstellen. Leider gibt es nur eine @Get Annotation, aber der Restlet -Autor Zustände, dass Sie a verwenden müssen @Get, und vergleichen Sie dann die Methode. Als die Dokumentation/Spezifikation sagt, es kann keinen Körper geben, sondern nur einen Nachrichtenheader.

So erstellen Sie nun einen Nachrichtenheader, der an den Server gesendet wird, da der folgende Code nicht funktioniert. Er sendet diese Headers: HTTP/1.1 204 Kein Inhalt, Inhaltslänge: 0

protected void addResponseHeader(String name, String value) {
    Form responseHeaders = (Form)getResponse().getAttributes().get(HeaderConstants.ATTRIBUTE_HEADERS);
    if (responseHeaders == null) {
        responseHeaders = new Form();
        getResponse().getAttributes().put(HeaderConstants.ATTRIBUTE_HEADERS, responseHeaders);
    }
    responseHeaders.add(new Parameter(name, value));
}

Der konkrete Code auf serverseitig:

@Get
public void execute() {
    if (Method.HEAD.equals(getMethod())) {
        //optional: getResponse().getEntity().setMediaType(MediaType.TEXT_PLAIN);
        getResponse().setStatus(Status.SUCCESS_OK, "hello head");
        addResponseHeader("X-my-header", "value");
    }
}

Der Clientcode:

@Test
public void head() {
    Request request = new Request(Method.HEAD, url);
    Response response = query(request);
    assertEquals(Status.SUCCESS_OK, response.getStatus());
    Form form = (Form)response.getAttributes().get(HeaderConstants.ATTRIBUTE_HEADERS);
    assertEquals("value", form.getFirstValue("X-my-value")); // does fail because it is null
}
War es hilfreich?

Lösung

Sie müssen nur @get für Real implementieren: Sollte mit einem HTTP arbeiten, um zuerst gut zu werden. Wenn Sie dann einen HTTP -Kopf ausgeben, wird er automatisch vom Framework behandelt, nichts anderes auf Ihrer Seite zu tun. Konzentrieren Sie sich einfach darauf, richtig implementiert zu werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top