Я использую JAX-RS для создания REST API. Для bootstrap всех ресурсов у меня переопределено «Приложение»:
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?