Quarkus, Hibernate ORM and REST - RESTEASY008200: JSON Binding deserialization error:
Quarkus, Hibernate ORM and REST - RESTEASY008200: JSON Binding deserialization error:
我正在尝试创建一个使用 Hibernate Panache 和 Rest 的项目,类似于 https://github.com/quarkusio/quarkus-quickstarts/tree/master/hibernate-orm-panache-resteasy 上的快速入门。
当我尝试 @Post
扩展 PanacheEntity
的实体时,如下所示,出现以下错误:
javax.ws.rs.ProcessingException: RESTEASY008200: JSON Binding deserialization error: Can't create instance
实体
@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 成功。
问题其实很简单,你只需要让classTrade
一个publicclass.
需要注意的是,这不是 Quarkus 限制,而是 JSON-B 限制(需要 de-serialized classes 有 public 或受保护 no-arg 构造函数 - 请参阅 JSON-B 规范的第 3.7 节)
我正在尝试创建一个使用 Hibernate Panache 和 Rest 的项目,类似于 https://github.com/quarkusio/quarkus-quickstarts/tree/master/hibernate-orm-panache-resteasy 上的快速入门。
当我尝试 @Post
扩展 PanacheEntity
的实体时,如下所示,出现以下错误:
javax.ws.rs.ProcessingException: RESTEASY008200: JSON Binding deserialization error: Can't create instance
实体
@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 成功。
问题其实很简单,你只需要让classTrade
一个publicclass.
需要注意的是,这不是 Quarkus 限制,而是 JSON-B 限制(需要 de-serialized classes 有 public 或受保护 no-arg 构造函数 - 请参阅 JSON-B 规范的第 3.7 节)