如何操纵GET响应中的信息

时间:2017-11-14 22:57:26

标签: java json rest jersey

我是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注释是否自动存储从指定路径返回的信息?有什么用?

1 个答案:

答案 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;
    }
}
相关问题