【问题标题】:Quarkus, Hibernate ORM and REST - RESTEASY008200: JSON Binding deserialization error:Quarkus、Hibernate ORM 和 REST - RESTEASY008200:JSON 绑定反序列化错误:
【发布时间】:2019-09-29 11:02:52
【问题描述】:

我正在尝试创建一个使用 Hibernate Panache 和 Rest 的项目,类似于 https://github.com/quarkusio/quarkus-quickstarts/tree/master/hibernate-orm-panache-resteasy 上的快速入门。

当我尝试@Post 扩展PanacheEntity 的实体时,如下所示,我收到以下错误:

javax.ws.rs.ProcessingException:RESTEASY008200:JSON 绑定反序列化错误:无法创建实例

实体

@Entity
@Cacheable
class Trade extends PanacheEntity {

    @Column(length = 40, unique = true)
    String name;

}

休息资源

import javax.enterprise.context.ApplicationScoped;
import javax.transaction.Transactional;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;

@Path("/trades")
@ApplicationScoped
@Produces("application/json")
@Consumes("application/json")
public class TradeReporterResource {


    @POST
    @Transactional
    public Response add(Trade trade) {
        System.out.println("begin");
        //t.closePrice = trade.closePrice;
        System.out.println("persisting");
        trade.persist();
        System.out.println("persisted");
        return Response.ok(trade).build();
    }
}

Pom 依赖项

<dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-bom</artifactId>
        <version>${quarkus.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-hibernate-orm-panache</artifactId>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-resteasy-jsonb</artifactId>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-jdbc-postgresql</artifactId>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-junit5</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>io.rest-assured</groupId>
      <artifactId>rest-assured</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-smallrye-openapi</artifactId>
    </dependency>
  </dependencies>

Penache 似乎有问题

当我从Trade 实体中删除extends PanacheEntity 时,至少我可以成功发布。

【问题讨论】:

  • 能否请您具体说明您与快速入门的不同之处?快速入门适用于 POST 和 PUT。您是否在 RESTEasy 资源中省略了@Transactional
  • 我看不出我在哪里做任何明显不同的事情。我已经更新了我的帖子以包含资源,是的,它有 @Transactional
  • 有趣!您可以分享一个我们可以检查的复制器项目吗?
  • @geoand - 请参阅github.com/magick93/Panachegate

标签: java hibernate quarkus


【解决方案1】:

问题其实很简单,你需要做的就是将Trade类设为public类。

需要注意的是,这不是 Quarkus 的限制,而是 JSON-B 的限制(要求反序列化的类具有公共或受保护的无参数构造函数 - 参见 JSON-B 规范的第 3.7 节)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多