java - 如何操作 GET 响应中的信息

标签 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 的非常基本的问题,所以如果这就像这里的 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/

相关文章:

java - javadoc-eclipse 的问题

java - quercus翻译的质量?

sql - SELECT 查询以在一行中打印为 JSON 列表

javascript - 如何从 javascript 访问 JSON 对象内的嵌套数组

java - Spring security中使用rest服务进行身份验证和授权

javascript - Angularjs $http.get 不起作用

java - ExecutorService 与 ThreadPoolExecutor 使用 LinkedBlockingQueue

javascript - AngularJS 指令范围内的重复元素引发 TypeError : Converting circular structure to JSON

ios - 移动应用程序的 REST API 请求

JAVA-如何将字符设置到字符串中单词的特定位置?