2017-08-14 11 views
1
@PostMapping(value = { "/weblogin", "/mobilelogin" }) 
@ResponseStatus(HttpStatus.OK) 
public AccessTokenResponseModel login() { // need to distinguish "/weblogin" or "/mobilelogin" } 

は、どのように私はポストの要求は「/ weblogin」またはログイン()メソッドでは、「/ mobilelogin」 から来て区別することができますか?@PostMapping、@GetMappingに異なる値を区別や春ブーツで@RequestMapping

+4

別のURIのためだけに余分なメソッドを宣言して、代わりにサービスを呼び出すのはなぜですか?コントローラのURIを検出するのではなく、面倒ではないと思います – XPLOT1ON

+0

Webtokenとmobiletokenが異なる点を除いて、 "/ weblogin"と "/ mobilelogin"には同じビジネスロジックがあるためです。コードの冗長性を避けることを目的としています。 – Zhichao

+0

次に、それぞれのトークンを取得して、要求が受信された場所から判断する必要があります。あなたのコードから、あなたはデスクトップからのログインとモバイルブラウザからのログインを区別しようとしているようです。ユーザーエージェントのヘッダーを見てください。 –

答えて

2

BEST_MATCHING_PATTERN_ATTRIBUTE属性を使用できます。

@PostMapping(value = { "/weblogin", "/mobilelogin" }) 
@ResponseStatus(HttpStatus.OK) 
public AccessTokenResponseModel login(HttpServletRequest httpRequest) { 
    final String requestMapping = (String) httpRequest.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE); 
    final boolean isMobileLogin = requestMapping.contains("/mobilelogin"); 

    .... 
}