2017-08-14 61 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

因爲「/ weblogin」和「/ mobilelogin」具有相同的業務邏輯,除了webtoken和mobiletoken是不同的。旨在避免代碼冗餘。 – 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"); 

    .... 
} 
相關問題