2017-03-12 13 views
2

Spring Bootを使用して、新しいユーザー登録を処理する私のRegisterControllerにいくつかのメソッドがあります。同じコントローラ内の異なるメソッドの@RequestMapping値を取得する

createNewUserメソッドは、新しいユーザーをデータベースに保存し、一意のトークンを持つリンクを含む確認電子メールを送信する役割を担います。

confirmUserメソッドは、確認リンクのGET要求を処理します。

createNewUserメソッドで@RequestMappingの値をconfirmUserに割り当てる方法はありますか?この値をハードコーディングする代わりに確認リンクを生成するために使用したいと思います。

// Process form input data 
@RequestMapping(value = "/register", method = RequestMethod.POST) 
public ModelAndView createNewUser(@Valid User user, BindingResult bindingResult) { 

} 

// Process confirmation link 
// Link in confirmation e-mail will be /registerConfirmation?token=UUID 
@RequestMapping(value="/registerConfirmation", method = RequestMethod.GET) 
public ModelAndView confirmUser(@RequestParam("token") String token) { 

} 
+0

confirmUserサービスをcreateNewUserとマージしないと、確認応答が返されます。 –

+0

@PratikAmbani confirmUser()は、ユーザーが電子メールの確認リンクをクリックしたときにのみ呼び出されるべきです。 createNewUser()メソッドは、登録フォームに必要事項を記入したものです。 –

+0

ところで、HTTP GETリクエストで状態を変更するのは良い習慣ではありません(DB内のユーザー情報を確認して更新したことを確認してください)。したがって、 'confirmUser'メソッドをHTTP POSTに変更することをお勧めします。 –

答えて

1

私は@RequestMapping値からそれを取得する方法を知りませんが、さまざまなオプションのカップルを持っています。

オプション1:マッピングの定数を作成し、両方の方法で参照できるようにするために使用します。

private final static String REGISTER_CONF_VAL = "/registerConfirmation"; 

@RequestMapping(value = "/register", method = RequestMethod.POST) 
public ModelAndView createNewUser(@Valid User user, BindingResult bindingResult) { 

} 

// Process confirmation link 
// Link in confirmation e-mail will be /registerConfirmation?token=UUID 
@RequestMapping(value=REGISTER_CONF_VAL, method = RequestMethod.GET) 
public ModelAndView confirmUser(@RequestParam("token") String token) { 

} 

オプション2:あまり理想的な、しかし、あなたはあなたの設定ファイルにregisterConfirmationを追加した場合、あなたはそれが好きでアクセスすることができます:あなたはおそらくないので、これは理想的ではない

@RequestMapping(value="${register.conf.val}", method = RequestMethod.GET) 
public ModelAndView confirmUser(@RequestParam("token") String token) { 

} 

理由がありますそれが環境によって異なることを望む。それはうまくいくと言った。

0

ユーザの要求に基づいてリンクを生成する必要がある場合は、コントローラのパス変数を使用できます。 Uはパス変数を取得し、パスを検証するためのメカニズムを使用することもできます。

{registerConfirmation}でregisterConfirmationを置き換えます。このメソッドでは、パスを取得するために@PathVariableアノテーションを使用します。この変数を使用して、パスが有効かどうかを確認します。

関連する問題