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

将嵌套实体插入spring boot(POST)的基本JSON

曹建明
2023-03-14

所以我是spring boot的新手,我遇到了一个小问题,我需要通过POST调用保存2个对象实体。问题是在Object中保存一个嵌套的对象数组。

JSON:

{ 
 "id": "100", 
 "department": "marand", 
 "patients": { 
 "patient": [ 
 { 
 "id": "1", 
 "first_name": "John", 
 "last_name": "Smith", 
 "diseases": { 
 "disease": [ 
 "nice_to_people", 
 "long_legs" 
 ] 
 } 
 }, 
 { 
 "id": "2", 
 "first_name": "Jenny", 
 "last_name": "Cox", 
 "diseases": { 
 "disease": [ 
 "used_to_have_dredds", 
 "nice_to_people" 
 ] 
 } 
 }, 
 { 
 "id": "3", 
 "first_name": "Martin", 
 "last_name": "Lewis", 
 "diseases": { 
 "disease": [ 
 "chocaholic", 
 "great_haircut" 
 ] 
 } 
 } 
 ] 
 } 
 } 

我有两个实体Doctor和Patient具有类构造函数:

没有吸气器和设置器的医生:

@Entity
@Table(name = "doktors")
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class Doktor implements Serializable {
    private static final long serialversionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;


    @Column(name = "department")
    private String department;

    @Autowired
    @OneToMany(mappedBy = "doktor",cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private List<Patient> patients;

和不带吸气器和设置器的病人:

@Entity
@Table(name = "patient")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Patient  implements Serializable {
        private static final long serialversionUID = 1L;

        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;

        @Column(name = "first_name")
        private String first_name;

        @Column(name = "last_name")
        private String last_name;



        @ManyToOne(fetch = FetchType.LAZY, optional = false)
        @JoinColumn(name = "doktor_id",nullable = false)
        @JsonIgnore
        private Doktor doktor;

       @ManyToMany(cascade = CascadeType.ALL)
        @JoinTable(name = "patient_disease", joinColumns = @JoinColumn(name = "patient_id",referencedColumnName = "id"),
               inverseJoinColumns = @JoinColumn(name = "disease_id",referencedColumnName = "id") )
        private List<disease> diseases; 

因此,当我将JSON插入POST调用时,我得到以下错误:{“Timestamp”:1613060297379,“Status”:400,“Error”:“Bad Request”,“Message”:“JSON parse Error:无法反序列化java.util.ArrayList 实例脱离START_OBJECT令牌;嵌套异常为com.fasterxml.jackson.databind.exc.MismatchedInputException:无法反序列化java.util.ArrayList


共有1个答案

漆雕令秋
2023-03-14

您的类不支持JSON。“病人”字段应该从“病人”中去掉。“病人”字段应该是这样的:

“患者”:[{“id”:“1”,“first_name”:“John”,“last_name”:“Smith”,“疾病”:{“疾病”:[“nice_to_people”,“long_legs”]}},{“id”:“2”,“first_name”:“jenny”,“last_name”:“Cox”,“疾病”:{“疾病”:[“used_to_have_dredds”,“nice_to_people”]}},{“id”:“3”,“first_name”:“Martin”,“last_name”:“Lewis”,

 类似资料:
  • 我有一个测试用例,需要将100,000个实体实例持久化到数据库中。我当前使用的代码就是这样做的,但直到将所有数据持久化到数据库中为止,最多需要40秒。数据是从一个大约15 MB大小的JSON文件中读取的。 现在,我已经为另一个项目在自定义存储库中实现了批处理插入方法。但是,在这种情况下,我有很多顶级实体要持久化,只有几个嵌套实体。 在我当前的例子中,我有5个实体,这些实体包含大约30个实体的列表。

  • 问题内容: 我有一个测试用例,需要将100‘000个实体实例持久存储到数据库中。我当前使用的代码可以做到这一点,但是要花40秒才能将所有数据持久保存在数据库中。从大小约为15 MB的JSON文件中读取数据。 现在,在另一个项目之前,我已经在自定义存储库中实现了批量插入方法。但是,在那种情况下,我要保留许多顶级实体,而只有少数嵌套实体。 在我目前的情况下,我有5个实体,其中包含约30个实体的列表。其

  • 我试图在字典中插入新的键值对,它嵌套在另一个字典中: 我认为这应该是一个简单的处理方法,但我花了一个小时,仍然无法找到它。我可以改用NSDictionary,但我真的很想了解如何在Swift中管理嵌套的字典?

  • 问题内容: 我可以使用Golang将平面对象插入BigQuery中-如何将嵌套数据插入表中? 我的BigQuery模式如下所示(从示例中): 我的第一次插入尝试如下所示(示例): 哪个变平并插入没有问题。我只是在用visit_duration 但是,我需要遍历一个片段并添加到访问记录中。我试图建立一个 访问 对象(没有要测试的循环)并将其添加到行中,但它没有插入,并且我没有收到任何错误: - -[

  • 我在我的项目中使用Spring引导和Spring数据,我有两个类: 第二类是: 添加任务的方法: 当我试图添加一个新的任务,它给出了这个错误: “找不到id为2的com.carpooling.entity.Station;嵌套异常为javax.persistence.EntityNotFoundException:找不到id为2的com.carpooling.entity.Station” 下面是

  • 问题内容: 我有大量(〜40000)嵌套的​​JSON对象,我想将它们插入elasticsearch中。 JSON对象的结构如下: 因此,JSON字段(此示例中为地址)可以具有JSON对象数组。 Logstash配置看起来像什么将这样的JSON文件/对象导入elasticsearch?该索引的elasticsearch映射应该看起来像JSON的结构。elasticsearch文档ID应设置为。 问