我正在尝试将 Web 挂钩注册到我的 Jira 云实例,并且我正在遵循他们的文档,但我无法使其工作。
具体部分:
Making API requests to the product as the add-on
:
atlassianHostRestClients.authenticatedAsAddon(AddonAuthenticationType.OAUTH2).getForObject("/rest/api/example", Void.class);
我的问题是当我运行它时出现错误:
401 未经授权:"{"message":"客户端必须经过身份验证才能访问此>资源。","status-code":401}"
现在,我知道我没有经过身份验证,但是
atlassianHostRestClients
对象,根据他们的文档:
atlassian-connect-spring-boot 将使用 JSON Web 令牌自动将来自您的附加组件的请求签名到已安装的主机产品。要发出请求,只需将 > AtlassianHostRestClients 对象自动装配到您的类中即可。
那么,有人有这方面的经验可以提供帮助吗?
我使用 Kotlin 执行此操作,并在我的类 JiraApiHelpers.kt 中有一个通用函数:
class JiraApiHelpers(
internal val atlassianRestClient: AtlassianHostRestClients
) {
fun <T: Any>getRequest(url: String, host: AtlassianHost, clazz: KClass<T>): T {
return atlassianRestClient.authenticatedAsAddon(host).getForObject(url, clazz.java)
?: throw Exceptions.InvalidJiraApiRequestException(url, host)
}
}
这让我可以将返回的对象格式化为给定的数据类:
val issueData = jiraApiHelpers.getRequest(urlField, hostUser.host, JiraIssueData::class)
这里的 hostUser 源自我的控制器,由 webhook 调用:
@PostMapping("/webhook")
fun calculateEstimatedEndTime(
@RequestBody issueEvent: JiraIssueEvent,
@AuthenticationPrincipal hostUser: AtlassianHostUser
这是在 connect-app 中实现的,其中 webhook 在 atlassian-connect.json 中的应用程序中定义:
"webhooks": [
{
"event": "jira:issue_updated",
"url": "/webhook",
"excludeBody": false
}
]