Jas*_*tle 2 java spring spring-mvc
我正在编写一个 Web API 服务器,它为三种相关类型的资源提供服务:作者、组和频道。每个频道必须完全由一个作者或组拥有,访问控制由请求用户与相关作者或组的关系决定,因此我计划创建一个 URL 结构,如:
完成的服务器将有更多的路径来处理作者、群组和频道;这些是作为例子给出的。
在 Spring Web MVC 中尝试使用三个控制器(即 AuthorsController、GroupsController、ChannelsController)来做到这一点是否合理?我如何将它们与 RequestMapping 注释连接在一起?有没有办法分解这些在 Spring Web MVC 中更有意义的职责,但仍然保持内聚性?
NB我看过一个类似的问题,但问题和答案都集中在内部类上。
你应该根据“单一职责原则”组织班级:一个班级应该做“一件事”,不管那是什么。
在这种情况下,似乎有一个类AuthorController来处理作者或组的 HTTP 机制通常会很好。这种控制器的映射看起来像这样(Groovy 为简单起见并使用DomainClassConverter):
@RequestMapping('/authors')
@RestController
class AuthorController {
@RequestMapping('/{id}')
Author singleResource(@PathVariable Author id) {
id
}
}
Run Code Online (Sandbox Code Playgroud)
现在您有一个需求,它似乎在多个类中具有相同的行为,这听起来像是继承的可能用途,但您也有一个对象Channel可以由多种所有者,这听起来像是泛型的可能用途.
如果作者和组之间的频道管理逻辑相同,那么我建议使用 anabstract class ChannelController<O extends ChannelOwner>来处理所有/channel映射;如果不同,则创建ChannelController<O>一个接口并声明映射。
请注意,如果您使用 Spring Security 来处理授权,@RequestMapping则在您覆盖/实现抽象方法时会继承注释,但@PreAuthorize类似的不是,因此必须将安全注释复制到最低级别的实现类中。您应该始终使用 MockMvc 来确保您收到适当的禁止访问的禁止响应。
| 归档时间: |
|
| 查看次数: |
3210 次 |
| 最近记录: |