の取り扱いとない前に、私は次のシナリオを実装する方法を探していますヘッダ(applicationId
)を送信しますが、それをクエリパラメタ(別名RequestParameter)として送信する場合、この値はSpring Boot RestControllerのメソッドパラメータとして取られます。コピーRequestParamsインタフェースを壊すレガシーシステムを置き換えるにはRestController
は、現在の方法は次のようになります。
- 注釈にクエリパラメータまたはヘッダーをマップする方法何とか:私は2つの方法があるかもしれないと思う
@RequestMapping(value = "/something", method = RequestMethod.GET) public void doSomething(@RequestHeader("applicationId") String applicationId) { }
メソッドのパラメータ
Interceptor
を書くと、リクエストのすべてのクエリパラメータを読み込み、存在しないヘッダをその値で設定します。この方法では、メソッドにはまったく触れる必要はありません。
私はそれらを実装する方法がわかりません(1.でも可能です)。私は自分自身でHandlerInterceptor
を試しましたが、それはpreHandle
のquery-paramsを読み込みましたが、RestControllerに転送される前に要求にヘッダーを設定できませんでした。
リクエストをラップする 'Filter'メソッドを記述し、' getHeader'メソッドをオーバーライドします。利用できない場合は、実際のリクエストに委譲します。おそらくこれをいくつかのよく知られたパラメータに制限したいと考えています。 –
合理的に聞こえます。あなたは 'javax.servlet.Filter'を参照していますか?もしそうなら、どこで 'getHeader()'メソッドをオーバーライドしますか?私はいくつかのロジックを 'doFilter()'に追加しなければならないと思います。 – user3105453
@ user3105453オプションとして、メソッドパラメータ( '@ RequestParam'や' @ RequestHeader'に似た)に独自のアノテーションを定義し、独自の 'HandlerMethodArgumentResolver' 'RequestHeaderMethodArgumentResolver'や' RequestParamMethodArgumentResolver'に似ています)。実装では、ヘッダーと要求パラメーターの値が検索されます。もちろんこの場合、すべてのメソッドでパラメータをマークする必要があります。あなたと一緒にOKであることは分かりません。 – Leffchik