【发布时间】:2020-03-18 11:06:45
【问题描述】:
我使用 JAX-RS 构建 REST API。为了引导所有资源,我重写了一个“应用程序”:
import javax.enterprise.context.ApplicationScoped;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationScoped
@ApplicationPath("/")
open class ApiConfig : Application() {
override fun getSingletons(): MutableSet<Any> {
println("----- init jaxrs -----")
return mutableSetOf(EchoResource())
}
}
如您所见,我用括号注册了EchoResource()。当我使用EchoResource::class时它不起作用。
我的问题是,我想向EchoResource 注入一些服务:
import dev.elysion.mail.smtp.MailService
import javax.enterprise.context.RequestScoped
import javax.inject.Inject
import javax.ws.rs.GET
import javax.ws.rs.Path
@Path("/echo")
@RequestScoped
class EchoResource @Inject constructor(private val mailService: MailService) {
@GET
fun getHello(): String {
return "Hello World"
}
}
当我添加构造函数时,我在 API Config 中收到一个错误,提示我没有为 MailService 传递参数。
在 Java 中,我会使用不关心任何参数的 EchoResource.class 注册资源。
如何使用 Kotlin 实现相同的目标?
【问题讨论】: