2015-01-20 54 views
1

我想有一個控制器,它映射到/site/和兩個不同的控制器內看起來是這樣的:是否有可能在Spring 4 MVC中將控制器/控制器嵌套爲內部類?

@Controller 
@RequestMapping(value="/api") 
public class ApiController { 
    @Controller 
    @RequestMapping(value="/foo") 
    public class FooController { 
     //Some /foo/* methods here 
    } 

    @Controller 
    @RequestMapping(value="/bar") 
    public class BarController { 
     //Some /bar/* methods here 
    } 

    //Other methods that don't match /foo or /bar 
} 

這是正確的,或者會是更好的做法與/site/foo到其分解成兩個獨立的控制器和/site/bar映射?

+0

爲什麼你需要內在的班級?爲什麼不能簡單地使用方法? – kosa 2015-01-20 23:22:45

+0

沒關係。取決於功能相關的foo和bar是如何的。如果它們幾乎相同,這是合理的。通常他們不一樣,所以這不會是一個好設計。 – 2015-01-20 23:43:12

+0

@PaulHicks:這就是我想的,謝謝你的確認。 – 2015-01-21 00:43:42

回答

-3

將您的類層次結構綁定到您的資源層次結構不應該是此處的主要設計驅動程序。

在Spring MVC中,控制器是簡單的POJO,使它們易於測試,組合比繼承更受青睞,註釋用於傳達意義並使代碼更具可讀性。

嵌套控制器在控制器下擊敗了其中的幾個目標。

+1

我不認爲這回答了這個問題。好像波林在問是否有可能 - 我也有興趣,如果可以這樣做,因爲我的大多數測試都證明不是。 – stites 2015-09-16 01:12:47

4

您應該使用方法而不是映射的類。代碼應該像這樣寫

@Controller 
@RequestMapping(value="/site") 
public class ApiController { 
    @RequestMapping(value="/foo", method=RequestMethod.GET) 
    public String doFoo { 
     // Foo Logic 
     return "Running Foo"; 
    } 
    @RequestMapping(value="/bar", method=RequestMethod.GET) 
    public String doBar { 
     // Bar Logic 
     return "Running Bar"; 
    } 
} 
+0

'FooController'和'BarController'將自己的權限和自己的方法控制器。父控制器將是各種元控制器。 – 2015-01-21 00:41:58