gpt4 book ai didi

java - 如何使用数据库列将 JPA 实体格式化为 JSON?

转载 作者:行者123 更新时间:2023-12-02 05:17:13 28 4
gpt4 key购买 nike

将 JPA 实体转换为不包含相关对象但包含数据库列的 JSON 的最佳方法是什么。

考虑:

public class Question implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
private Integer id;

@Basic(optional = false)
@NotNull
@Size(min = 1, max = 255)
@Column(name = "question_title")
private String questionTitle;

@Size(max = 500)
@Column(name = "question_desc")
private String questionDesc;

@JoinColumn(name = "requires_question_id", referencedColumnName = "id")
@ManyToOne
private Question requiredQuestion;

...
}

将问题直接转换为 json 可能如下所示:

{
"id": 1,
"questionTitle": "Q1",
"questionDesc": "A Question 123"
"requiredQuestion": {
"id": 2,
"questionTitle": "Q2",
"questionDesc": "A Question 456"
}
}

然而,更理想的结果可能如下所示:

{
"id": 1,
"question_title": "Q1",
"question_desc": "A Question 123"
"required_question_id": 2
}

获得理想结果的最佳方法是什么?

使用“question_title”等字符串键创建 HashMap 并手动分配对象属性,然后将映射转换为 json?

最佳答案

您可以使用Jackson JSON Processor像任何其他 POJO 一样将您的实体序列化为 JSON。要完全控制输出格式,请编写 custom serializer对于 Question 类。它看起来像这样

public class QuestionSerializer extends JsonSerializer<Question> {
@Override
public void serialize(Question value, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeStartObject();
jgen.writeNumberField("id", value.getId());
jgen.writeStringField("question_title", value.getQuestionTitle());
jgen.writeStringField("question_desc", value.getQuestionDesc());
jgen.writeNumberField("required_question_id", value.getRequiredQuestion().getId());
jgen.writeEndObject();
}
}

关于java - 如何使用数据库列将 JPA 实体格式化为 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26823283/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com