我正在尝试从在控制器类级别定义的请求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();
}
}
显然,此时我遇到了“Lifecycle method annotation requires a no arg method”(生命周期方法注释需要无参数方法)错误,所以我知道@PostConstruct不是一个好方法,但我想知道是否还有其他方法可以实现这一点,也许是像@Before这样的单元测试方法?
提前感谢!
您可以使用带有@Aspect的AOP在从BaseController执行任何方法之前运行一段代码。
请看一下如何实现它。https://dzone.com/articles/aspect-oriented-programming-with-springboot
我不会使用@Value注释,因为您将整个配置逻辑分散在整个系统中@ConfigurationProperties(请参见此处:https://www.baeldung.com/configuration-properties-in-spring-boot)会是你的朋友。您还可以使用其他对象类型以及顶部的验证。
关于单元测试中的@Before:@PostConstruct是在构造bean本身之后调用的,而不是在方法调用之前调用的。如果您想在方法调用之前做一些事情,ArgumentResolver或使用Spring AOP的Aspect将是您的朋友,我宁愿使用ArgumentResolver并在引擎盖下管理一切。再一次,我怀疑您是否真的进行了正确的设计,因为@Pathvariable应该由API用户提供,而不是由配置提供。
我不知道你为什么真的需要这个。路径变量是在REST调用期间外部设置的。在启动阶段,您没有这个路径变量,这意味着您无法从中解析任何内容。
为了更好地理解您想要实现什么以及为什么它不起作用,我建议阅读这篇简短的stackoverflow文章:Spring BeanPostProcessor到底是如何工作的?
如果您有静态标识符,我宁愿使用ConfigurationProperties。
你能提供更多关于你到底想用这个实现什么的输入吗?我个人会尽量避免全局变量。
我已经在google控制台中创建了项目,启用Dialogflow API创建的OAuth v2凭据使用此凭据我调用了access token API来生成令牌 我收到了访问令牌并将其传递给Dialog flow API 但我还是遇到了这个错误 “error”:{“code”:401,“message”:“请求的身份验证凭据无效。应为OAuth 2访问令牌、登录cookie或其他有效的身份验证凭据。
嗨,我有一个restendpointxyz。com/test/create,其中预期的内容类型为application/json,内容为 在具有数组的body中还有一些其他字段。 我在Spring rest控制器中使用rest模板来访问上述endpoint,我还想传递数据。我不确定endpoint端使用什么域模型将json中的数据从客户端映射到服务器端。 如何使用rest模板使用上述数据命中上述e
我正在做一个项目,我必须使用REST和Java访问一组谷歌日历。 该程序位于私有的非Google服务器上,定期(通过cron作业)连接到Google帐户,获取链接到该帐户的日历列表,获取每个日历上个月的事件,并返回包含所有信息的XML文件。该程序应该能够执行和访问日历,没有任何用户输入。目前,项目指定只读取日历,而不修改日历(因此只进行get/list调用)。 我浏览了Google文档,并使用客户
我已经用一些实体设置了JHipster,就像它的主页上描述的那样。AngularJS的前端工作得很好,API页面也让我测试我的服务。 现在,我尝试使用Spring的RestTemplate编写一个REST客户机,如下所示: 但这会导致以下错误:[WARN]org.springframework.web.client.resttemplate-get请求“http://localhost:8080/
我已经在Centos远程服务器上安装并设置了Rabbitmq。后来,我创建了一个文件“rabbitmq.config”,并添加了以下代码行 [{rabbit,[{loopback_users,[]}]}]
问题内容: 我正在一个项目中,我必须使用REST并使用Java来访问一组Google日历。 该程序位于私人非Google服务器上,定期(通过cron作业)连接到Google帐户,获取链接到该帐户的日历列表,获取每个日历的上个月活动,并返回包含所有内容的XML文件信息。该程序应该能够在没有任何用户输入的情况下执行和访问日历。目前,该项目指定将仅读取日历,而不修改日历(因此将仅进行GET / LIST