【发布时间】:2021-11-02 16:13:57
【问题描述】:
简单的问题。是否可以在没有@Endpoint 的情况下创建端点?
我想通过文件并根据其上下文的内容创建相当动态的端点。
谢谢!
更新我的想法。我想创建一个插件系统之类的东西,以使我的应用程序更易于维护和未来的功能。
值得一提的是,我正在将 Micronaut 与 Kotlin 一起使用。现在我有固定定义的端点,它与我的命令脚本相匹配。
我的描述文件将在/src/main/resources下
我有以下示例描述文件的样子。
ENDPOINT: GET /myapi/customendpoint/version
COMMAND: """
#!/usr/bin/env bash
# This will be executed via SSH and streamed to stdout for further handling
echo "1.0.0"
"""
# This is a template JSON which will generate a JSON as production on the endpoint
OUTPUT: """
{
"version": "Server version: $RESULT"
}
"""
我希望如何使它与应用程序一起工作。
import io.micronaut.docs.context.events.SampleEvent
import io.micronaut.context.event.StartupEvent
import io.micronaut.context.event.ShutdownEvent
import io.micronaut.runtime.event.annotation.EventListener
@Singleton
class SampleEventListener {
/*var invocationCounter = 0
@EventListener
internal fun onSampleEvent(event: SampleEvent) {
invocationCounter++
}*/
@EventListener
internal fun onStartupEvent(event: StartupEvent) {
// 1. I read all my description files
// 2. Parse them (for what I created a parser)
// 3. Now the tricky part, how to add those information to Micronaut Runtime
val do = MyDescription() // After I parsed
// Would be awesome if it is that simple! :)
Micronaut.addEndpoint(
do.getEndpoint(), do.getHttpOption(),
MyCustomRequestHandler(do.getCommand()) // Maybe there is a base class for inheritance?
)
}
@EventListener
internal fun onShutdownEvent(event: ShutdownEvent) {
// shutdown logic here
}
}
【问题讨论】:
-
文件来自哪里,您打算如何指定端点路径和实现?您能否更明确地描述一下您的具体情况?
-
嗨@tmarwen,它只是资源中的一个文本文件,我将在其中描述端点。在启动时,我会阅读所有这些描述文件,然后这是我的问题,我会从 micronaut 调用一些东西来添加这些端点。我没有找到可以在运行时添加这些信息的基类。比如什么操作,端点以及它应该调用什么。
-
请您更新您的帖子,并提供一个草稿示例,说明您的项目结构(属性和来源)以及您打算如何实现绑定(属性文件 -> 方法处理程序)。$跨度>
-
是的,我更新了我的帖子以帮助澄清我的想法。 @tmarwen 我希望它可以帮助您理解我。 :)
标签: kotlin micronaut micronaut-rest