2011-12-20 14 views
0

私はAndroidクライアントを作成したjax-rs restサービスを持っています。休憩方法でクライアントタイプを区別する方法は?

レストサービスは、メソッドをCRUDレポートに公開します。 http get要求は、xml構造体のレポートのリストを返します。

ブラウザからサービスにアクセスすると、xmlの代わりにhttp get要求がHTMLを返すようにします。

異なるクライアントに対して異なる結果を返すメソッドをオーバーロードすることはできますか、ブラウザクライアントに対して別のrestメソッドを実装する必要がありますか?

また、両方のXML構造を同じにして、ブラウザ用のXMLスタイルシートを使用すると考えましたが、自動生成されたxmlにxsltリンクを挿入する方法がわかりません。

答えて

1

Quentinの答えは正しい方向の正しいポインタですが、jax-rs固有のものではありません。

jax-rs specification注釈@Producesを定義するセクションで3.5

アプリケーションクラスは、サポート要求と応答それぞれ@Consumes及び23の@Producesアノテーション を使用してメディアタイプを宣言することができます。これらの注釈は、リソースメソッド、 リソース24クラス、またはエンティティプロバイダ(4.2.3節参照)に適用することができる(MAY)。リソースメソッドのこれらの注釈のうち を使用すると、 リソースクラスまたはメソッド引数のエンティティプロバイダ、または 戻り値の型が無効になります。これらの注釈が26個もない場合は、任意のメディアタイプ(/)に対して をサポートします。

@Producesで宣言されたMIMEタイプは、リクエストのHTTP Accept Request Headerと自動的に一致します。つまり、クライアントの要求を区別するために、異なる@Produces宣言でリソースメソッドを定義できます。私の場合は

私はXMLおよびHTMLを返されたメソッドを返した方法を必要とするので、私は、リソース/レポート内の2つのメソッド宣言:を参照してください

@GET 
@Produces({MediaType.TEXT_HTML}) 
@Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
public String getReportsAsHtml(){...} 

そして

@GET 
@Produces({MediaType.APPLICATION_XML}) 
@Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
public List<Report> getReportsAsXml() {...} 

をパズルの最後の部分のAcceptヘッダー設定についてのQuentinのコメント

1

ちょうどXMLとしてすべての時間を送信し、スタイルシートを使用しHTTP Accept Request Header

+0

これは私が探しているようだが、私のために明確にすることができるだろうか?リクエストがブラウザから来た場合は、通常はhtmlのaccept mime typeが優先されますか? – Marmoy

+0

Androidクライアントが送信するacceptヘッダーには、 'application/xml'の設定が強く指定されている必要があります。ブラウザは 'text/html'の設定を表示するか、XMLと' */* 'の等価の重みを与えます。 HTMLの設定が弱いサービスの場合は、ブラウザにHTMLを、クライアントにXMLを配信します。 – Quentin

0

を使用してください。この場合、スタイルシートはかなりプリミティブな感じがするので、CSSを使用してください。次に、CSSスタイルシートを使用するXML文書の例と、そのスタイルシートが古いバージョンのIEと下位互換性がある場合の例を示します。

http://mailmarkup.org/hcl/hcl1_0-documentation.xsd

名前空間宣言の不要な言及に対抗するために、スタイルシートでお知らせ重複。それがIEとの互換性をどのように達成できたかです。

関連する問題