Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
springmvc,控制器设计_Spring_Spring Mvc_Spring Security - Fatal编程技术网

springmvc,控制器设计

springmvc,控制器设计,spring,spring-mvc,spring-security,Spring,Spring Mvc,Spring Security,我正在SpringMVC中结合SpringSecurity构建一个web应用程序。我的问题是关于应用程序的内部设计。更具体地说,如何设置控制器。我从宠物诊所的例子中得到了很多启发,在这个例子中,每个域对象有一个控制器(所有者控制器、宠物控制器、兽医控制器等等) 我想在我的应用程序中引入一个管理后端接口。这意味着在每个控制器中创建特定于管理员的方法和@RequestMappings。请求映射路径由拦截url模式保护,所以我不必关心它们在哪里。然而,我发现这个解决方案有点不雅观 在宠物诊所的例子中,

我正在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";
}