java - 将 JAVA 对象反序列化为具有关系的 JSON

标签 java json jackson

我有这个具有关系的对象:

@Entity
@Table(name = "data_model")
public class DataModel {

    @Id
    @GeneratedValue
    @Column(name = "model_id")
    private Integer id;

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

    @OneToMany(mappedBy = "dataModel", cascade = {CascadeType.PERSIST, CascadeType.REMOVE, CascadeType.MERGE})
    private List<OutputField> outputFields;
}

和:

@Entity
@Table(name = "data_model_output_field")
public class OutputField {

    @Id
    @GeneratedValue
    @Column(name = "output_field_id")
    private Integer id;

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

    @JsonIgnore
    @ManyToOne(optional = false, fetch = FetchType.LAZY, cascade = CascadeType.REFRESH)
    @JoinColumn(name = "model_id")
    private DataModel dataModel;
}

我想将此 json 反序列化为 Java 对象:

{
  "name": "New data model with join",
  "outputFields": [
    {
      "sourceTable": "r"
    },
    {
      "sourceTable": "ri"
    }
  ]
}

当我尝试使用 Jackson 反序列化它时,我得到了它: enter image description here 如何使用 Jackson 将父引用放入子元素中?

最佳答案

我解决了。我使用了 JsonManagedReferenceJsonBackReference 注释:

@Entity
@Table(name = "data_model")
public class DataModel {

    @Id
    @GeneratedValue
    @Column(name = "model_id")
    private Integer id;

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

    @JsonManagedReference(value = "outputFields")
    @OneToMany(mappedBy = "dataModel", cascade = {CascadeType.PERSIST, CascadeType.REMOVE, CascadeType.MERGE})
    private List<OutputField> outputFields;
}
@Entity
@Table(name = "data_model_output_field")
public class OutputField {

    @Id
    @GeneratedValue
    @Column(name = "output_field_id")
    private Integer id;

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

    @JsonBackReference(value = "outputFields")
    @ManyToOne(optional = false, fetch = FetchType.LAZY, cascade = CascadeType.REFRESH)
    @JoinColumn(name = "model_id")
    private DataModel dataModel;
}

关于java - 将 JAVA 对象反序列化为具有关系的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61479523/

相关文章:

java - Subversion 中二进制文件的替代方案

java - 如何使用 "external"包中的 GWT UI Binders

java - 在 Linux 上找不到字体名称

php - 数据库 : String Json vs new column

javascript - 遍历 JSON - 特殊方式

java - 如何仅为单个 HTTPURLConnection 将 “jsse.enableSNIExtension” 设置为 false?

javascript - 在动态创建输入元素时为 onclick 分配参数值

android - Proguard 与 gson 和 jackson 的问题

java - Jackson mixins 抛出 stackoverflow 错误

java - 使用两个不同的元素序列化 jsonArray