gpt4 book ai didi

java - 如何扩展/编辑 Netbeans 自动生成的 REST 服务?

转载 作者:太空宇宙 更新时间:2023-11-04 13:18:58 24 4
gpt4 key购买 nike

我不熟悉从 Netbeans 8 中的数据库自动生成 REST 服务代码。

Disclaimer: after a discussion (in the comments), I realized that I should warn to avoid this question if you are not familiar with the automatic generation of REST service from DB in Netbeans (https://netbeans.org/kb/docs/websvc/rest.html). That's because you need to know what is going on and where to put your hands in order to edit them. I don't provide any non-working code here, rather I want to know what should I do in order to edit such services. I provide an example of what I would like to obtain.

我从数据库自动生成了 REST 服务的代码,并获得了实体类和服务“外观”类。我现在需要做的是扩展/编辑这些服务,但我不知道该 Handlebars 放在哪里。

例如,考虑以下场景。我有一个学生,他/她通过了很多考试。从DB的角度来看,学生-考试是一对多的关系。当我测试其余 API 并按学生 ID 执行 GET 时,生成的 JSON 不包含与该学生关联的考试集合(如预期)。我应该在哪里以及如何更改自动生成的服务代码才能获取学生 json 中的考试集合?

换句话说,假设我执行 GET 来../student/12,我想要获取的是:

{ 
"id":12, "name":"Marco", "age":26, "exams": [
{ "id":1, "exam_name":"Computer Networks" },
{ "id":15, "exam_name":"Algorithms"}
]
}

致以诚挚的问候

最佳答案

看起来我已经成功了,但我不知道这是否是最优雅的方法。

这就是我所做的。

1) 转到自动生成的 child 实体类(即 Exam.java )并将自定义 NamedQuery 添加到 NamedQueries 注释中。例如,

@NamedQueries({
... default auto-generated stuff ...
@NamedQuery(name = "getExamsOfStudent", query="SELECT e FROM Exams e WHERE e.student.ID =: studentID")})

2) 转到自动生成的 child REST 服务类(即 ExamFacadeREST.java)并添加一个方法来检索父级的子级,使用实体类中定义的 NamedQuery。例如,

@GET
@Path("studentID/{studentID}")
@Produces({"application/xml","application/json"})
public List<Exam> getExamsOfStudent(@PathParam("studentID") Integer studentID) {
javax.persistence.Query query = getEntityManager().createNamedQuery("Exam.getExamsOfStudent");
query.setParameter("studentID", studentID);
return query.getResultList();
}

此时,您拥有一个 REST 服务,可以检索父实体的子实体。

然而,这并不是我最初要求的。在执行学生的 GET(按 ID)时,我想将考试作为集合检索到学生 JSON 中。为此,只需转到父实体 REST 服务(即 StudentFacadeREST.java )并正确编辑 find方法。

有人知道更优雅的方法吗?

编辑1:我正在尝试第二种方法(在执行学生的 GET 时,在学生 JSON 中将考试作为集合检索),并且我发现该集合没有序列化到输出 JSON 中。对此有何建议?

编辑2:我明白了。对于“普遍扩展”服务,我上面回答的第一部分很好。但是,如果您想获得已映射为数据库中关系的集合的序列化,只需正确删除相对的 @XmlTransient 即可。实体自动生成的类中的注释。请注意避免循环引用,即您可能需要添加 @XmlTransient子实体类中的“getParent()”方法的注释。对于这个例子:(A) 转到Student实体类并删除 @XmlTransient来自 getExamsCollection() 的注释方法;(B) 转到Exam实体类并添加@XmlTransient getStudent() 的注释方法。

希望这有帮助。

致以诚挚的问候

关于java - 如何扩展/编辑 Netbeans 自动生成的 REST 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33281966/

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