springmvc,控制器设计
我正在SpringMVC中结合SpringSecurity构建一个web应用程序。我的问题是关于应用程序的内部设计。更具体地说,如何设置控制器。我从宠物诊所的例子中得到了很多启发,在这个例子中,每个域对象有一个控制器(所有者控制器、宠物控制器、兽医控制器等等) 我想在我的应用程序中引入一个管理后端接口。这意味着在每个控制器中创建特定于管理员的方法和@RequestMappings。请求映射路径由拦截url模式保护,所以我不必关心它们在哪里。然而,我发现这个解决方案有点不雅观 在宠物诊所的例子中,它看起来像:springmvc,控制器设计,spring,spring-mvc,spring-security,Spring,Spring Mvc,Spring Security,我正在SpringMVC中结合SpringSecurity构建一个web应用程序。我的问题是关于应用程序的内部设计。更具体地说,如何设置控制器。我从宠物诊所的例子中得到了很多启发,在这个例子中,每个域对象有一个控制器(所有者控制器、宠物控制器、兽医控制器等等) 我想在我的应用程序中引入一个管理后端接口。这意味着在每个控制器中创建特定于管理员的方法和@RequestMappings。请求映射路径由拦截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";
}
}
@控制器
@SessionAttributes(类型=Owner.class)
公共类所有者控制器{
私人临床医生服务;
//前端法
@RequestMapping(value=“/owners/find”,method=RequestMethod.GET)
公共字符串initFindForm(映射模型){
model.put(“所有者”,新所有者());
返回“所有者/查找者”;
}
//管理方法
@RequestMapping(value=“/admin/owner/find”,method=RequestMethod.GET)
公共字符串initFindForm(映射模型){
model.put(“所有者”,新所有者());
//管理视图
返回“管理员/所有者/查找者”;
}
}
另一种选择是为每个@RequestMapping(或每个操作)使用一个控制器
@控制器
@RequestMapping(value=“/admin”,method=RequestMethod.GET)
公共类管理员控制器{
私人临床医生服务;
//管理方法
@RequestMapping(value=“/owners/find”,method=RequestMethod.GET)
公共字符串initFindForm(映射模型){
model.put(“所有者”,新所有者());
//管理员特定视图
返回“管理员/所有者/查找者”;
}
}
这将在我看来导致真正的鲁棒控制器与许多方法
第三种选择是将它们混合在一起
@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";
}
@控制器
@SessionAttributes(类型=Owner.class)
公共类AdminOwnerController{
私人临床医生服务;
//管理方法
@RequestMapping(value=“/admin/owner/find”,method=RequestMethod.GET)
公共字符串initFindForm(映射模型){
model.put(“所有者”,新所有者());
//管理视图
返回“管理员/所有者/查找者”;
}
}
我的问题是什么是标准方法?通常我使用AdminOwnerController的混合方法,在这种方法中,每个控制器最多有5-10种方法 如果最终每个控制器有1-2个方法。我会考虑基于管理域将它们分组在一起。
@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";
}