为Jira创建动态Web hook,连接Spring boot

问题描述 投票:0回答:1

我正在尝试将 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 对象自动装配到您的类中即可。

那么,有人有这方面的经验可以提供帮助吗?

jira jira-rest-api jira-rest-java-api atlassian-plugin-sdk
1个回答
0
投票

我使用 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
  }
]
© www.soinside.com 2019 - 2024. All rights reserved.