我正在构建一个API,它具有以下结构:
/projects/{project-name}/a/...
/projects/{project-name}/b/...
/projects/{project-name}/c/...
/projects/{project-name}/d/...
字符串
我希望a,B,c,d的逻辑在它们自己的控制器上被覆盖。此外,在每个请求上,我希望验证{project-name}变量并在请求上注入一个属性,该属性将包含一个项目实体。
我绝对想避免在每个控制器上检查项目。
有什么想法可以实现这一点吗?据我所知,Sping Boot 上的路径继承是不可能的(我真的很想拥有其他框架提供的继承,比如RESTEasy)。
到目前为止,我唯一的想法是使用过滤器,但我更喜欢MVC/Webflux级别的解决方案。
我用的是Sping Boot 3。
任何建议都很感激。
1条答案
按热度按时间6jygbczu1#
方法
1.编写一个基接口,并使用
@RequestMapping
注解所需的基路径。1.编写带有
@Controller
注解的实现,但不带@RequestMapping
(这样基本路径就不会被覆盖)1.对于验证,使用过滤器方法本身。
的数据
BaseController接口
字符串
子控件示例
(You可以写任何数字,只要方法上的最终路径不重复。
型
**注意:**以上代码是用Java 11和SpringBoot 2.7.4测试的,我想它使用的是Spring MVC 5.2.x。
使用
@ModelAttribute
验证project-id
(基于此this question的答案)
如果我们不想使用过滤器(尽管我随时都会使用),我们可以在基接口中添加一个带有
@ModelAttribute
注解的方法,该方法将在每个端点方法之前被调用。尽管@ModelAttribute
的文档没有明确说明,但它无论如何都会被调用。我们可以在BaseController
中对此方法进行以下更改。型