我是 java/rest/jersey 新手,所以请耐心等待。
问题:我想使用 GET 方法来检索我之前发布的一些信息。我唯一的困惑是...调用 GET 后信息在哪里?
这是我的帖子(您可以忽略它,因为我知道这部分有效):
@POST @Path("/tools")
public Response createTool(JsonNode tool) throws URISyntaxException {
//use custom validator to de-couple implementation from validation
ToolValidator validator = new ToolValidator(tool);
if(validator.isNotNull() == false) {
System.out.println("in not null");
return Response.status(400).entity("Please add tool details").build();
}
if (validator.hasValidType() == false) {
System.out.println("in valid timestamp");
return Response.status(400).entity("Please provide a valid tool type").build();
}
if(validator.haveValidValues() == false ) {
System.out.println("in valid values");
return Response.status(400).entity("Please provide a tools list with valid numerical values").build();
}
String type= tool.get("type").asText();
return Response.status(201).entity(tool).build().created(new URI("/tools/"+type)).build();
}
它肯定正确地发布了一个工具(我已经测试过它并看到了它,我相信这有效,但也可能无效)。
现在我想做的是获取 json,看看是否符合某些要求,然后返回答案。基本上,与上面的 POST 代码无关,对于导航到它时返回一些 json 的任何 url,我希望能够获取该 json 并用它做一些事情。
@GET @Path("/tools/{type}")
public Response getToolInfo(@PathParam("type") String type) {
return Response.ok().build();
}
我唯一的问题是......要操纵的信息“在哪里”?我觉得我正在问一个关于 REST/Jersey 的非常基本的问题,所以如果这就像这里的 ABC 一样,我很抱歉。
基本上,我使用 POST 方法来 POST 具有某些特定 json 的工具。我可以导航到该页面并查看 json 对象。现在我想使用 GET 方法来分析 json,但是...当我决定使用 GET 方法时,我不知道如何/在哪里存储这些信息。
@get注解是否自动将从指定路径返回的信息存储在某处?有什么作用吗?
最佳答案
从您粘贴的代码来看,它看起来没有存储任何内容。在您的 @POST 中,您似乎传递了 JsonNode 工具,从中创建了一个 ToolValidator 类型的对象,您可以用它来执行某种操作验证。从您的 JsonNode 工具
中,您检索一个名为“type”的字段。
最后,您使用已传递的参数创建一个响应实例,并将 Uri 更改为“/tools/”,并将变量“type”中的字符串值更改为“type”。
因此,您似乎没有进行任何数据库访问来存储作为参数传递的 JsonNode
。
It definitely posts a tool correctly (I've tested it and seen it).
它发布该工具是因为Response.status(201).entity(tool).build()
您只需告诉它在构建器中设置响应实体即可。而 build()
是一个响应实例。
出于测试目的,仅在类中创建 JsonNode 类型的全局变量,并将 POST 方法中传递的参数(JsonNode 工具
)复制到全局变量。然后您可以在 GET 方法中检索它。不要忘记为全局变量创建 getter 和 setter。
在现实生活中,您会将内容存储在数据库中。如果只是为了某些原型(prototype),那么全局变量就足够了
<小时/>这是一个小例子来说明我的意思:
public class SomeClass {
private JsonNode copiedTool;
@POST @Path("/tools")
public Response createTool(JsonNode tool) throws URISyntaxException {
setCopiedTool(tool);
String type= tool.get("type").asText();
return Response.status(201).entity(getCopiedTool()).build().created(new URI("/tools/"+type)).build();
}
@GET @Path("/tools/{type}")
public Response getToolInfo(@PathParam("type") String type) {
if(getCopiedTool().get("type").equals(type)) {
return Response.ok(getCopiedTool()).build();
}
return Response.status(204).build();
}
public JsonNode getCopiedTool() {
return copiedTool;
}
public void setCopiedTool(JsonNode copiedTool) {
this.copiedTool = copiedTool;
}
}
关于java - 如何操作 GET 响应中的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47296652/