2013-11-09 35 views
1

在Java的MVC控制器如何得到註解@RequestMapping( 「/ getThisValueFromOtherClass」)的價值?我知道我們可以通過使用java反射來提取這個,但是還有其他方法嗎?謝謝。在Java控制器上如何獲得註解@RequestMapping(「/ getThisValueFromOtherClass」)的值?

@RequestMapping("/getThisString") 
public class MyController{} 
+0

剛需清楚,你想從其他類中獲取控制器A中定義的@ReqestMapping annotstion的值屬性?我也可以知道用例是什麼? – coder

+0

@coder - 我想獲得註釋的價值,目的,如果追蹤的網址的變化,例如IM引用其他類此網址,而不是編輯它在所有的地方我只想得到的值像這樣映射MyController.getBaseMapping()。我知道我們可以通過java反射來獲取它,但有其他方法嗎? –

回答

2

如果目的只是爲了避免在每一個地方改變URL,我會建議定義一個字符串中的一些類常量,而不是在請求映射使用硬編碼字符串,並使用恆定的每一個地方。 未來,如果你想tp \ o改變網址,簡單地更新一個地方的常數值

final String constUrl =「/ myurl」;

@RequestMapping(值= constUrl)

可以使恆靜,如果定義在另一個類

+0

是的,即時通訊做方法請求映射的這種方法,但我想從超類中提取此值,所以它將可用於擴展該類的所有控制器。 –

+0

我會推薦同樣的方法用於類級別請求映射。如果你想要不斷限制,你可以保護它。 – coder

+0

我想我只能堅持這種方法。多謝你們! –

1

要獲取路徑,您應該將請求即HttpServletRequest作爲參數傳遞給您的處理程序方法。

@RequestMapping(value={"/getThisString"}, method=RequestMethod.GET) 
public String handlerMethod (Model model, HttpServletRequest request) throws Exception {    
    String getThatString = request.getServletPath(); 
    .... 
} 

參考:

+1

* @ RequestMapping僅適用於方法而不適用於類*這是不正確的,這個註解也適用於類。引用文檔:*註釋映射Web請求到具體的處理類和/或處理方法* –

+0

第一行Java文檔的... RequestMapping映射Web請求到具體的處理類和/或處理方法詮釋。 – Ashish

+0

更正已完成。 :) – user2339071

0

在你的情況下,如果一個URI模式「/getThisString」被請求時,它會映射到這個MyController,並在@RequestMapping(method = RequestMethod.GET)聲明處理與方法的要求。

您可以參考本教程@RequestMapping example

希望它能幫助。

2

註解的值可以通過編程閱讀:

@RequestMapping("/endpoints") 
public ResponseEntity<String> getPath() { 
    String path = getClass().getAnnotation(RequestMapping.class).value()[0]; 
    return new ResponseEntity<String>(path, HttpStatus.OK); 
} 
相關問題