イントラ用語集#5

Http Headerを取り扱う際の共通化をしたいのですが、いいサンプルが見当たりません。
RESTを取り扱う際には出来るだけServletAPI依存せずにHeaderを扱いたいのですが、
大抵はみかけるのは解析時にMapになっている程度のようです。

出力時にも便利な方法をさがしているのですが、

Restlet
でも実装のほうはcom.noelios.restlet.http.HttpConstantsで

public static final String HEADER_ACCEPT = "Accept";
public static final String HEADER_ACCEPT_CHARSET = "Accept-Charset";
public static final String HEADER_ACCEPT_ENCODING = "Accept-Encoding";
で宣言されてるだけ?みたいです。たぶん。


public class FieldName {
public static final FieldName ACCEPT = new FieldName("Accept", StringField.class);
public static final FieldName ACCEPT_CHARSET = new FieldName("Accept-Charset", StringField.class);
public static final FieldName IF_MODIFIED_SINCE = new FieldName("If-Modified-Since", DateField.class);
}

こんな感じで作ってみました。
ここで、ペアのStringField.classやDateField.classは出力時、解析時の
共通インターフェースをもつクラスです。

ここで問題になるのは、やっぱり拡張ヘッダーの扱いです。
このクラスはライブラリとして利用したいので逐一このクラスに追加される
のはやめておきたいので

public static final ArrayList<FieldName> EXTEND_FIELDS = new ArrayList<FieldName>(3);

拡張用の領域を設けてみて
(ArrayListの初期サイズに特別な意図はないです・・・)

public class XFieldName {
public static final FieldName X_WSSE = new FieldName("X-WSSE", StringField.class);

static {
FieldName.addFieldName(X_WSSE);
}
}


利用するプロジェクトで追加していくことでなんとかなるかもしれません。
このクラスを先にロードしてHTTPのリクエストが来る前に拡張ヘッダを追加しないと
いけないですよね。Servlet load処理にうまく関連づければいいのかな。

これで行ってみようと思います。

コメント

人気の投稿