为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 REST 调用开始时访问 @PathVariable?

如何在 REST 调用开始时访问 @PathVariable?

互换的青春 2022-04-28 15:39:37
我正在尝试从在控制器类级别定义的请求 URL,从使用 @PostConstruct 注释的方法访问路径变量。想法是在执行相关控制器方法之前,在 API 调用开始时使用此路径变量来初始化局部变量。这是为了避免在每个方法中都有那段代码,而只是让控制器在调用开始时设置变量。该代码可能会更好地解释这一点:@RestController@RequestMapping("/path/{variable}")public class BaseController {    protected Object object;    @PostConstruct    protected void setObject(@PathVariable("variable") Long variable){        this.object= objectRepository.findById(variable).get();    }}显然,此时我遇到了“生命周期方法注释需要无参数方法”错误 - 所以我知道 @PostConstruct 不是要走的路,但我想知道是否有另一种方法可以实现这一点,也许是什么像 @Before 进行单元测试?提前致谢!
查看完整描述

3 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

我不确定你为什么真的需要这个。Pathvariable 在 REST 调用期间在外部设置。在启动阶段,您没有此路径变量,这意味着您无法从中解决任何问题。

为了更好地了解您要实现的目标以及它为什么不起作用,我建议您阅读这篇简短的 stackoverflow 文章:Spring BeanPostProcessor 究竟是如何工作的?

如果您有静态标识符,我宁愿使用 ConfigurationProperties。

您能否提供更多有关您要通过此实现的目标的信息?我个人会尽量避免使用全局变量。


查看完整回答
反对 回复 2022-04-28
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

在从 BaseController 执行任何方法之前,您可以使用 AOP 和 @Aspect 来运行一段代码。

请查看以了解如何实现它。 https://dzone.com/articles/aspect-orienting-programming-with-springboot


查看完整回答
反对 回复 2022-04-28
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

我不会使用@Value Annotation,因为您将整个配置逻辑分布在整个系统中。@ConfigurationProperties(请参阅此处:https ://www.baeldung.com/configuration-properties-in-spring-boot )将成为您的朋友。您也可以使用其他对象类型以及顶部的验证。

关于单元测试中的@Before:@PostConstruct 在构造 bean 本身之后调用,而不是在方法调用之前。如果您想在方法调用之前做一些事情,ArgumentResolver 或使用 Spring AOP 的 Aspect 将是您的朋友,我宁愿使用 ArgumentResolver 并在后台管理所有内容。再一次,我怀疑您是否真的做了正确的设计,因为 @Pathvariable 应该由 API 用户提供,而不是来自配置。


查看完整回答
反对 回复 2022-04-28
  • 3 回答
  • 0 关注
  • 124 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信