2015-09-28 71 views
1

我有幾個現有的@RestController s。訪問這些控制器的路徑是例如:如何通過條件委託給RestController?

localhost/first/test 
localhost/second/test 

代碼:

@RestController 
@RequestMapping("/first") 
public class MyRestController1 { 
    @ResponseStatus(HttpStatus.OK) 
    @RequestMapping(value = "/test", method = RequestMethod.GET) 
    public void test(@Valid RestParameters p) { 
     //... 
    } 
} 

@RestController 
@RequestMapping("/second") 
public class MyRestController2 { 

} 

問題:是否有可能趕上不同的網址,和委託給這些控制器包括@Valid其餘參數的自動驗證?

例如:localhost?param=first。是否有可能把這個委託給localhost/first/test

此外我想複製完整的querystring並將其發送到適當的restcontroller。訪問/first/second時,查詢字符串會有所不同,並且可能有不同的參數。

回答

0

步驟1) 創建一個捕獲@Path("/")的類。我們稱之爲「Class1」

步驟2) 在Class1中創建方法,但不要更改此方法的@Path("")。確保它適當地捕獲@QueryString("param") String firstOrLast。我們稱之爲「Method1」

步驟3) 現在當您訪問localhost?param=first時,Class1.Method1()被調用。因此,在這種方法中,你可以建立一些邏輯(例如if (firstOrLast.equals("first")) { // call method_x },其中method_x是你調用它的相關委託方法。

+0

是的,但是如果我委託給'myRestController1.test(params)'我想確保這個get自動驗證'@ Valid'和所有其他'spring'東西 – membersound

+0

您是否正在驗證'Class1.Method1()'中每個條件的相同對象?如果爲true,那麼您可以複製/移動'@ Valid'東西到授權之前的'Class1.Method1()'... – Niccaman

+0

不,我有不同的驗證約束條件,因爲'get-query'字符串在控制器之間會有所不同。 – membersound