2016-12-27 3 views
0

メソッドカスタム(GET)のREST Webサービスがあります。cxfのメッセージ本文にカスタムオブジェクトを設定する方法は?

@GET 
@Path("/custom") 
public UIResponse custom(final UIParameters uiParameters){...} 

このように、この方法には1つの引数があります。これは私のカスタムオブジェクトです。

オブジェクトUIParametersは、クエリ文字列として指定された引数から作成されます。

例えば、私は、URLからこのパラメータを取得UIParameterオブジェクトを構築し、メッセージの内容を設定するためにInInterceptorを使用しようとしました

UIParameters { 
    String objectType = "article"; 
} 

http://example.com/custom?objectType=article

UIParameters 1つのフィールドが含まれますオブジェクト。不幸にもそれはうまくいかない。 その後、私はUIParametersのMessageBodyReaderを提供しましたが、それでも動作しません。

この目標を達成するにはどうすればよいですか?

おかげ

更新:InInterceptorで

を私はヘッダをhttpにクエリ文字列をコピーしました。 MessageBodyReaderでユーザプレースパラメータにアクセスできるURLの一部。ここで私のオブジェクトUIParametersを構築することができます。

すべてうまくいきますが、私はこの解決策が最高だとは思わない。

もっと良い解決法を知っていますか?

答えて

0

注釈QueryParam("")は、注入されたすべてのクエリパラメータを取得できます。

インターセプタは不要で、推奨される方法ではありません。あなたは豆を構築したい場合は自分でクエリパラメータを使用してhttp://cxf.apache.org/docs/jax-rs-basics.html#JAX-RSBasics-Parameterbeans

@GET 
@Path("/custom") 
public UIResponse custom(@QueryParam("") UIParameters uiParameters) 

class UIParameters { 
     String objectType; 
} 

CXFのマニュアルを参照してください

@GET 
@Path("/custom") 
public UIResponse custom(@Context UriInfo uriInfo){ 
    MultivaluedMap<String, String> params = uriInfo.getQueryParameters(); 
    new UIParameters().Builder() 
     .objectType(params.getFirst("type")) 
     .build(); 
} 
+0

はありがとう@Context UriInfoアノテーションを使用します。もちろんこれは最善の方法ですが、残念ながらビルダーパターンを使用したいのでセッターを使用できません。 – bombel

+0

セッターなしでお試しください。私はカスタムでそれらをコピーしましたが、ドキュメントが必要でないかもしれないのを見てください。 – pedrofb

+0

すべてのチェーンを呼び出す方法。新しいUIParameters()。Builder()。objectType( "type")。ビルド();私はすべてのフィールドを設定した後、オブジェクト全体を検証したい。 – bombel

関連する問題