イントラ用語集#5
Http Headerを取り扱う際の共通化をしたいのですが、いいサンプルが見当たりません。
RESTを取り扱う際には出来るだけServletAPI依存せずにHeaderを扱いたいのですが、
大抵はみかけるのは解析時にMapになっている程度のようです。
出力時にも便利な方法をさがしているのですが、
Restletでも実装のほうはcom.noelios.restlet.http.HttpConstantsで
こんな感じで作ってみました。
ここで、ペアのStringField.classやDateField.classは出力時、解析時の
共通インターフェースをもつクラスです。
ここで問題になるのは、やっぱり拡張ヘッダーの扱いです。
このクラスはライブラリとして利用したいので逐一このクラスに追加される
のはやめておきたいので
拡張用の領域を設けてみて
(ArrayListの初期サイズに特別な意図はないです・・・)
利用するプロジェクトで追加していくことでなんとかなるかもしれません。
このクラスを先にロードしてHTTPのリクエストが来る前に拡張ヘッダを追加しないと
いけないですよね。Servlet load処理にうまく関連づければいいのかな。
これで行ってみようと思います。
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処理にうまく関連づければいいのかな。
これで行ってみようと思います。
コメント