4

レストレットの応答にヘッダーを追加する方法がわからないようです。Responseオブジェクトで使用可能なメソッドを見るとsetStatus、、、だけが表示されますが、これらのいずれも、応答にカスタムhttpヘッダーを設定する方法を教えてくれません。setEntitysetAttributes

たとえばGET、次のようなリターンを返す呼び出しがあります。

HTTP/1.1 200 OK
Content-Type: text/json
Content-Length: 123
Some-Header: the value
Some-Other-Header: another value

{
  id: 111,
  value: "some value this could be anything",
  diagnosis: {
    start: 12552255,
    end: 12552261,
    key: "ABC123E11",
    source: "S1",
  }
}

多分それが何であれ。handleGetメソッドでは、次のように処理します。

final MediaType textJsonType = new MediaType("text/json");

@Override
public void handleGet() {
  log.debug("Handling GET...");
  final Response res = this.getResponse();

  try {
    final MyObject doc = this.getObj("hello", 1, "ABC123E11", "S1");
    final String docStr = doc.toString();

    res.setStatus(Status.SUCCESS_OK);
    res.setEntity(docStr, textJsonType);

    // need to set Some-header, and Some-other-header here!
  }
  catch(Throwable t) {
    res.setStatus(Status.SERVER_ERROR_INTERNAL);
    res.setEntity(new TextRepresentation(t.toString()));
  }
}
4

1 に答える 1

10

RestletはHTTPよりもRESTアーキテクチャの原則に重点を置いているため、プロトコルに依存せず、HTTPヘッダーを直接公開しません。ただし、それらはorg.restlet.http.headers応答の属性に(としてForm)格納されます。この方法で設定できるのはカスタムヘッダーのみであり、標準ヘッダーは設定できないことに注意してください(これらはフレームワークによって直接処理されます。たとえば、 'sContent-Typeに依存します)。RepresentationMediaType

例については、これを参照してください:http: //blog.arc90.com/2008/09/15/custom-http-response-headers-with-restlet/ (リンクコンテンツはInternet Archive Wayback Machineからも入手できます)。

于 2010-09-17T00:14:54.960 に答える