当前位置: 首页 > 知识库问答 >
问题:

为什么quarkus-panache、hibernate和jsonb的反序列化失败了?

池俊茂
2023-03-14
curl --location --request POST 'localhost:8080/trace' \
--header 'Content-Type: application/json' \
--data-raw '{
    "traceOwner": "AtestOwner",
    "participants": ["Karl", "John"],
    "place": "10101, TestCity, TestStreet 25",
    "startTime": "2016-07-20T23:07:41.907+02:00[Europe/Berlin]",
    "stopTime": "2016-07-27T23:07:45.807+02:00",
    "comment": "TestComment"
}'
javax.ws.rs.ProcessingException: RESTEASY008200: JSON Binding deserialization error: javax.json.bind.JsonbException:
Unable to deserialize property 'traceOwner' because of: Error deserialize JSON value into type: class
de.test.Person.
2020-07-27 10:48:12,597 SEVERE [org.ecl.yas.int.Unmarshaller] (executor-thread-1) Unable to deserialize property 'traceOwner' because of: Error deserialize JSON value into type: class de.test.Person.
import java.time.ZonedDateTime;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.ManyToOne;

import io.quarkus.hibernate.orm.panache.PanacheEntity;

@Entity
public class Trace extends PanacheEntity {
  @ManyToOne
  public Person traceOwner;
  @ElementCollection
  public List<String> participants;
  public String place;
  @Column(columnDefinition = "TIMESTAMP WITH TIME ZONE")
  public ZonedDateTime startTime;
  @Column(columnDefinition = "TIMESTAMP WITH TIME ZONE")
  public ZonedDateTime stopTime;
  public String comment;

  public String toString() {
    return String.format("%s, [%s, %s], %s, %s, %s", this.traceOwner, this.participants.get(0),
        this.participants.get(1), this.place, this.startTime, this.stopTime, this.comment);
  }
}
import javax.persistence.Entity;

import io.quarkus.hibernate.orm.panache.PanacheEntity;

@Entity
public class Person extends PanacheEntity {
  public String name;
}
  @POST
  @Produces(MediaType.APPLICATION_JSON)
  @Consumes(MediaType.APPLICATION_JSON)
  public Response createTrace(@Valid Trace trace) {
    try {
      LOG.info(trace);
      transaction.begin();
      trace.persist();
      transaction.commit();
    } catch (NotSupportedException | SystemException | SecurityException | IllegalStateException | RollbackException
        | HeuristicMixedException | HeuristicRollbackException e1) {
      LOG.error("Could not finish transaction to save entity", e1);
      return Response.status(HttpStatus.SC_BAD_REQUEST).build();

    }
    return Response.ok(Trace.find("startTime =?1 AND traceOwner = ?2", trace.startTime, trace.traceOwner).firstResult())
        .build();
  }

我真的不明白为什么jsonB会抱怨反序列化以及我该如何修复它。此外,在某些时候,我希望公共列表 参与者 公共列表 参与者 ,但这可以等待关系和反序列化工作。

共有1个答案

龚玄天
2023-03-14

所以,我发现我做错了什么。两件事:

  1. 使用有效的JSON:
curl --location --request POST 'localhost:8080/trace' \
--header 'Content-Type: application/json' \
--data-raw '{
    "traceOwner": {"name": "AtestOwner"},
    "participants": ["Karl", "John"],
    "place": "10101, TestCity, TestStreet 25",
    "startTime": "2016-07-20T23:07:41.907+02:00[Europe/Berlin]",
    "stopTime": "2016-07-27T23:07:45.807+02:00",
    "comment": "TestComment"
}'

请注意不同的“跟踪所有者”部分。

 类似资料:
  • 我试图使用PostgreSQL构建一个简单的quarkus-panache示例。Postgres版本为12.2。我的Quarkus版本是1.3.1。最终版本。在使用序列生成器时,我总是得到这样一个错误: 对应的表格如下: 我错过了什么?

  • 我将按照https://Quarkus.io/guides/rest-data-panache和https://Quarkus.io/guides/MongoDB-panache教程使用Quarkus Panache MongoDB实现一个简单的MongoDB实体和资源。 以下是我目前掌握的情况: 运行时,我可以通过调用

  • “StackTrace”:“java.lang.IllegalStateException:没有为持久化单元定义池default-reactive\n\tat io.quarkus.hibernate.reactive.runtime.fastboothibernateReactive.RegisterVertXandpool(fastboothibernateReactive.RegisterV

  • 我试图创建一个使用Hibernate Panache和Rest的项目,类似于https://github.com/quarkusio/quarkus-quickstarts/tree/master/hibernate-orm-panache-resteasy上的quickstart。 当我尝试扩展的实体时,如下所示,我得到以下错误: ProcessingException:RESTEASY0082

  • 我正在尝试使用apache camel jackson xml对xml进行反序列化,然后发生了一些奇怪的事情,我无法解释。这是我正在尝试反序列化的xml(它是简单的xmltd v xml文件): 这是我的POJO: 电视。Java语言 程序Java语言 Credits.java 其他POJO并不重要。下面是路由配置: 使用此设置和我在开始时提供的xml,会发生以下异常: 通用域名格式。faster

  • 我有以下简化设置: 4)应用程序.属性 当我使用本机maven配置文件(mvn clean package-pnative)运行该文件时,我得到: 使用--report-unsupport-elements-at-runtime运行它也没有太大帮助。当我删除MyEntity类时,它在Mac+GRAALVM-CE-Java11-20.0.0上成功地编译为本机可执行文件