【问题标题】:Spring MVC, Controllers designSpring MVC,控制器设计
【发布时间】:2013-10-26 00:03:41
【问题描述】:

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

}

我的问题是什么是标准方法?

【问题讨论】:

    标签: spring spring-mvc spring-security


    【解决方案1】:

    通常我使用 AdminOwnerController 的混合方法,最终每个控制器最多有大约 5-10 个方法。

    如果您最终每个控制器有 1-2 个方法。我会考虑根据管理域将它们组合在一起。

    【讨论】:

      猜你喜欢
      • 2011-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      • 2017-09-21
      • 2013-05-14
      • 1970-01-01
      相关资源
      最近更新 更多