我正在使用Spring Security在Spring MVC中构建一个Web应用程序。我的问题涉及应用程序的内部设计。更具体一点 - 如何设置控制器。 Pet Clinic的例子我得到了很多启发,每个域对象有一个控制器(所有者控制器,宠物控制器,兽医控制器等)。
我想向我的应用程序介绍一个管理后端界面。这意味着在每个控制器中创建特定于管理员的方法和@RequestMappings。请求映射路径由intercept-url模式保护,因此我不必关心它们的位置。但是我发现这个解决方案有点不优雅。
在宠物诊所的例子看起来像:
@Controller
@SessionAttributes(types = Owner.class)
public class OwnerController {
private final ClinicService clinicService;
// Front end method
@RequestMapping(value = "/owners/find", method = RequestMethod.GET)
public String initFindForm(Map<String, Object> model) {
model.put("owner", new Owner());
return "owners/findOwners";
}
// Admin method
@RequestMapping(value = "/admin/owners/find", method = RequestMethod.GET)
public String initFindForm(Map<String, Object> model) {
model.put("owner", new Owner());
//Admin view
return "admin/owners/findOwners";
}
}
其他选择是为每个@RequestMapping(或每个动作)设置一个控制器
@Controller
@RequestMapping(value = "/admin", method = RequestMethod.GET)
public class AdminController {
private final ClinicService clinicService;
// Admin method
@RequestMapping(value = "/owners/find", method = RequestMethod.GET)
public String initFindForm(Map<String, Object> model) {
model.put("owner", new Owner());
//Admin specific view
return "admin/owners/findOwners";
}
}
在我看来,这将导致具有许多方法的非常强大的控制器。
第三种选择是将这些混合起来。
@Controller
@SessionAttributes(types = Owner.class)
public class AdminOwnerController {
private final ClinicService clinicService;
// Admin method
@RequestMapping(value = "/admin/owners/find", method = RequestMethod.GET)
public String initFindForm(Map<String, Object> model) {
model.put("owner", new Owner());
//Admin view
return "admin/owners/findOwners";
}
}
我的问题是什么是标准方法?
答案 0 :(得分:1)
通常我使用AdminOwnerController的混合方法,其中每个Controller最多有大约5-10个方法。
如果每个控制器最终有1-2个方法。我会考虑根据管理域将它们组合在一起。