我是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的一个非常基本的基本问题,所以我很抱歉这就像这里的ABCs一样。
基本上,我使用我的POST方法来发布一个具有特定json的工具。我可以导航到该页面并查看json对象。现在我想使用GET方法来分析json但是...当我决定使用GET方法时,我不知道这些信息的存储方式/位置。
@get注释是否自动存储从指定路径返回的信息?有什么用?
答案 0 :(得分:1)
从您粘贴的代码中看起来并不存储任何内容。在@POST
中,您似乎传递了JsonNode tool
,您可以创建一个ToolValidator
类型的对象,您可以使用该对象进行某种验证。从您的JsonNode tool
中检索一个名为“type”的字段。
最后,使用您已经传递的参数创建一个响应实例,并将Uri更改为“/ tools /”,并将变量“type”中的任何内容的String值更改。
所以看起来你没有进行任何数据库访问来存储作为参数传递的JsonNode
。
它肯定会正确发布一个工具(我已经测试过并看过它)。
由于此Response.status(201).entity(tool).build()
,它会发布该工具
您只是告诉它在构建器中设置响应实体。而build()
是一个响应实例。
出于测试目的,只在类中创建一个类型为JsonNode的全局变量,并将POST方法中传递的参数(JsonNode tool
)复制到全局变量中。然后,您可以在GET方法中检索它。不要忘记为全局变量创建getter和setter。
在现实生活中,您可以将数据存储在数据库中。如果它只是用于某些原型,则全局变量应该足够
这是我的意思的一个很小的例子:
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;
}
}