gpt4 book ai didi

java - 返回新生成的 id restful service post

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:11:36 27 4
gpt4 key购买 nike

我正在尝试在我的 REST 网络服务中编辑我的创建方法,以便它应该从对象返回新创建的 ID。过去两天我一直在尝试,但我一定是做错了什么......

这是在服务器端编辑的创建方法:

@POST
@Consumes({"application/xml", "application/json"})
@Path("withID")
@Produces("text/plain")
public String create2(Users entity) {
getEntityManager().persist(entity);
getEntityManager().flush();
System.out.println("new id: " + entity.getId());
return String.valueOf(entity.getId());
}

它基于(由 netbeans)生成的 count() 方法,如下所示:

@GET
@Path("count")
@Produces("text/plain")
public String countREST() {
return String.valueOf(super.count());
}

如果我从我的客户那里请求添加一个新的 Users 对象,它会像预期的那样工作。新用户被添加到数据库中。在 GlassFish 服务器日志中,我看到 System.out.println 命令显示了新创建的 ID。但是,如果我通过 netbeans 中的 TestRestful Web 服务进行测试,将客户端生成的 XML 代码粘贴到正确的窗口并点击“测试”按钮,我会收到一个HTTP Status 415 - Unsupported Media Type 错误。

我做了一些研究,发现 this问题。所以我的猜测不是返回一个字符串,而是应该返回一个状态为 201 CREATED 的 Response 对象并调整标题或其他东西?我查看了 spring 示例,但由于我没有使用 spring,所以我不知道如何调整 create2 方法代码...但是我试了一下,但遗漏了一些部分:

@POST
@Consumes({"application/xml", "application/json"})
@Path("withID")
@Produces("text/plain") //should this change to application/xml?
public Response create2(Users entity) {
getEntityManager().persist(entity);
getEntityManager().flush();
System.out.println("new id: " + entity.getId());

//Response response = Response.created(... + "withID/" + entity.getId()); //response need an URI, can I get this through the entity object?

return Response.status(200).entity(entity.getId().toString()).build();
}

我希望我走在正确的轨道上。很抱歉发了这么长的帖子,希望有人能在这里帮助我。提前致谢!

编辑:现在的工作示例:

@POST
@Consumes({"application/xml"})
@Path("withID")
@Produces({"application/xml"})
public Response create2(Users entity) {
getEntityManager().persist(entity);
getEntityManager().flush();
return Response.status(201).entity(entity.getId().toString()).build();
}

最佳答案

我不知道 NetBeans 的东西,我们正在使用 Spring..但是返回一个 Response 对象是个好主意,我们总是这样做并且我们还返回创建的 ID:

return Response.status(200).entity(createdObject.getId().toString()).build();

不受支持的 MediaType 非常烦人。当您提到客户端生成的 xml 数据时,我不确定您在说什么。我们使用 JSON,即使响应只是一个简单的字符串,我们也会告诉创建方法生成JSON:

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Transactional
public Response create(T source) {
}

我们在命令行上使用的简单测试:

$ curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"id":95, "additional":"stuff..."}' "http://localhost:8080/rest/resource"

好吧,祝你好运。看来您的方向是正确的。

关于java - 返回新生成的 id restful service post,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12971236/

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