2009-06-02 15 views
1

Restletフレームワークは、自動コンテンツネゴシエーションを処理することになっています。しかし、それは適切に行うようには思われません。RestletはどのようにHTTP Acceptヘッダーを処理しますか?

クライアントがAcceptヘッダーに値を指定してHTTP GET要求を送信すると、Restletは自動的にその内容をネゴシエートしません。

Acceptヘッダーの処理方法を知っている人はいますか?

答えて

8

Restlet APIは、 "Accept"ヘッダーを幅広くサポートしています。情報は、解析され、Request.getClientInfo().getAcceptedMediaTypes()List<Preference<MediaType>>メソッドを介して利用可能です。

ここで、自動的にコンテンツをネゴシエートするために、Restletエンジンは利用可能なバリアントに関する情報を持っている必要があります。これは、Restlet 1.1の目的org.restlet.resource.Resource classであり、Restlet 2.0バージョンの新しいorg.restlet.resource.ServerResourceクラスが開発されています。 Restlet 1.1で

、あなたはこのような変異型を宣言し、リソースのサブクラスを作成します。

public Representation represent(Variant){ 

    if(MediaType.TEXT_PLAIN.equals(variant.getMediaType()){ 

    ... 

    else if(...) 

    ... 
} 

敬具、 ジェローム

getVariants().add(new Variant(MediaType.TEXT_PLAIN)); 

    getVariants().add(new Variant(MediaType.APPLICATION_XML)); 

を次に、このようなrepresent(Variant)メソッドをオーバーライド

PS:今後の質問やアーカイブを調べるには、メーリングリストを利用してください: http://www.restlet.org/community/lists

+0

私はちょっとあなたの答えを修正します:public Representation represent(Variant variant){if(MediaType.TEXT_PLAIN.isCompatible(variant.getMediaType()){... else if(...)...}したがって、methos equals()の代わりに、isCompatible()メソッドを使用してください。 – Dani

関連する問題