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

Is it possible to nest controllers/have controllers as inner classes in Spring 4 MVC?

我想要一个映射到 /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";
    }
}

将您的 class 层次结构与您的资源层次结构联系起来不应成为此处的主要设计驱动因素。

IN Spring MVC,控制器是简单的 POJO,使它们易于测试,组合优于继承,注释用于传达含义并使您的代码更具可读性。

在 Controllers 下嵌套 Controllers 会破坏其中的几个目标。