Java 在Spring4MVC中是否可以嵌套控制器/将控制器作为内部类?

Java 在Spring4MVC中是否可以嵌套控制器/将控制器作为内部类?,java,spring,spring-mvc,spring-annotations,Java,Spring,Spring Mvc,Spring Annotations,我希望有一个映射到/site/的控制器,并且在这两个不同的控制器中看起来像: @Controller @RequestMapping(value="/api") public class ApiController { @Controller @RequestMapping(value="/foo") public class FooController { //Some /foo/* methods here } @Controller

我希望有一个映射到
/site/
的控制器,并且在这两个不同的控制器中看起来像:

@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
映射将其拆分为两个单独的控制器?

您应该使用方法而不是类进行映射。代码应该这样写

@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";
    }
}

将类层次结构绑定到资源层次结构不应该是这里的主要设计驱动因素

在SpringMVC中,控制器是简单的POJO,以使其易于测试,组合优于继承,注释用于传达含义并使代码更具可读性


将控制器嵌套在控制器下会破坏其中几个目标

为什么你需要一个内在的类?为什么不能简单地使用这个方法呢?没关系。取决于foo和bar在功能上的关联程度。如果它们几乎相同,这是合理的。通常它们是不一样的,所以这不是一个好的设计。@PaulHicks:我就是这么想的,谢谢你的确认。
FooController
BarController
将是他们自己权利的控制器,有他们自己的方法。父控制器应该是某种元控制器。我不认为这回答了这个问题。似乎Paulin在问这是否可能——我也很感兴趣,因为我的大多数测试都证明了这是不可能的。