#kotlin #resteasy #quarkus
Вопрос:
Я создаю приложение в Котлине и Кваркусе. Теперь я создал универсальный ресурс, который должен быть унаследован другими моими ресурсами, чтобы уменьшить избыточность кода. Когда мой пользовательский ресурс наследует общий источник, я получаю следующее сообщение:
It's not possible to add a synthetic constructor with no parameters to the unproxyable bean class
Я совсем новичок в Котлине и Кваркусе, и когда я гуглю это конкретное сообщение об ошибке, я получаю только один результат старой ошибки в самом Кваркусе. Ниже приведены мои ресурсы пользователя и общие ресурсы:
@ApplicationScoped
@Path("/users")
class UserResource(user: UserRepository): GenericResource<User>(user)
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
open class GenericResource<T : Any>(
private var repository: PanacheRepository<T>
) {
@GET
@Produces(MediaType.APPLICATION_JSON)
fun findAll() : PanacheQuery<T> = repository.findAll()
@POST
@Transactional
fun add(
@Valid resource: T
) : AddResponse =
try {
repository.persist(resource)
AddSuccess(resource)
} catch (e: Exception) {
AddFailure(e)
}
@GET
@Path("/{id}")
fun findById(
@PathParam("id")
id : UUID
) : Uni<T> = repository.find("id", id).firstResult()
@PUT
@Transactional
@Path("/{id}")
fun update(
@PathParam("id")
id : UUID,
resource: T
) : UpdateResponse =
try {
repository.persist(resource)
UpdateSuccess(resource)
} catch (e: Exception) {
UpdateFailure(e)
}
@DELETE
@Transactional
@Path("/{id}")
fun delete(
@PathParam("id")
id : UUID
) : DeleteResponse =
try {
repository.delete("id", id)
DeleteSuccess("Deletion successful")
} catch (e: Exception) {
DeleteFailure(e)
}
}
Это зависимости RESTeasy, которые я использую:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-jackson</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest-client</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest-client-jackson</artifactId>
</dependency>
Кто-нибудь знает, что я делаю не так?
Комментарии:
1. Когда я удаляю аннотацию ApplicationScoped из пользовательского ресурса, я получаю следующее сообщение об ошибке: Не удалось найти конструктор для класса: com.fortuneapp.backend.application.rest.UserResource
2. Какие зависимости RESTEasy вы используете?
3. @geoand, я обновил qn с помощью зависимостей RESTeasy.
4. Использование RESTEasy Reactive с Quarkus приводит к гораздо лучшей поддержке Kotlin. Пытаюсь меняться
quarkusquarkus-resteasy*
сquarkus-resteasy-reactive*
иquarkus-rest-client
сquarkus-rest-client-reactive*
5. Я добавил реактивные зависимости и переписал некоторый код, чтобы сделать его реактивным. К сожалению, я все еще получаю ошибку: javax.enterprise.inject.spi.DeploymentException: Невозможно добавить синтетический конструктор без параметров в непроксируемый класс компонентов: com.fortuneapp.backend.application.rest.UserResource. Я обновил свой код в qn с помощью реактивного кода.