首页 > 解决方案 > 在 Quarkus 中使用通用资源进行 API 调用

问题描述

我正在 Kotlin 和 Quarkus 中创建一个应用程序。现在我创建了一个通用资源,需要由我的其他资源继承以减少代码冗余。当我的 UserResource 继承 GenericResource 时,我收到以下消息:

It's not possible to add a synthetic constructor with no parameters to the unproxyable bean class

我对 Kotlin 和 Quarkus 还很陌生,当我在谷歌上搜索这个特定的错误消息时,我只得到 Quarkus 本身的一个旧错误的结果。下面是我的 UserResource 和 GenericResource:

@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>

有谁知道我做错了什么?

标签: kotlinresteasyquarkus

解决方案


推荐阅读