是否可以将控制器/控制器作为内部类嵌套在Spring 4 MVC中?

时间:2015-01-20 23:02:25

标签: 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
    @RequestMapping(value="/bar")
    public class BarController {
       //Some /bar/* methods here
    }

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

这是可以的,或者更好的做法是将其拆分为两个具有/site/foo/site/bar映射的独立控制器?

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:-2)

将您的类层次结构绑定到资源层次结构不应该是此处的主要设计驱动程序。

在Spring MVC中,控制器是简单的POJO,使它们易于测试,组合比继承更受青睐,注释用于传达意义并使代码更具可读性。

控制器下的嵌套控制器会破坏其中的几个目标。