2016-10-21 4 views
1

私は、サーブレットを持っており、以下のようにサーブレットからの要求を聞くためにラクダのルートを使用して:matchOnUriPrefixが真であるので、それには問題はありませんApache Camel - サーブレット・コンポーネント - バインディング・パス変数は可能ですか?

from("servlet:///basepath?matchOnUriPrefix=true") 

、以下のURLパターンの要求が正常で耳を傾けていますルート:

ホスト:ポート/ BasePathの/ dynamicSubPath

私が持っていたい、何が、私はトンをバインドするパス変数(dynamicSubPath)を行うことができますどのような方法がある、ということです交換財産ですか?

私は以下のようにパスを得ることができることを知っている:

String path = exchange.getIn().getHeader(Exchange.HTTP_PATH, String.class); 

しかし、私は、このような文字列解析をしたいいけません。春のMVCでは、私は以下のように、コントローラへのパス変数を注入することができます

@RequestMapping(path = "/basepath/{dynamicSubPath}", method = RequestMethod.GET) 

、その後、以下のようにdynamicSubPath変数を取得することができます。

@PathVariable String dynamicSubPath 

ラクダのサーブレット・コンポーネントのための可能な同じようなことはありますか?

答えて

1

私はラクダがこれをサポートしているとは思わない。

デフォルトでは、すべてのリクエストヘッダーとクエリのパラメータは、インメッセージのヘッダーとして設定されます。要求されたパスも(ヘッダExchange.HTTP_PATHで指摘したとおり)存在しますが、そのコンポーネントに分割されません。

文字列を解析し、それに応じてパス変数をメッセージヘッダーまたは交換プロパティとして設定するカスタムプロセッサを登録する必要があります。

+1

はいこれは、サーブレットを使用するプレーンなHTTPではサポートされていません。ただし、RESTを使用する場合は、servletコンポーネントとのパスバインディングもサポートするrest-dslを使用できます。 http://camel.apache.org/rest-dsl –

+0

ありがとう!少なくとも今私はそれがサポートされていないことを知っている:) – simpleusr

関連する問題