【问题标题】:javax.ws.rs: What is Actually Returned by a Methodjavax.ws.rs:方法实际返回的内容
【发布时间】:2016-07-27 10:09:01
【问题描述】:

我正在开发一个 REST API。这个样本在这里工作得很好,但我真的对这里的一些事情感到困惑。我的方法 getAll 返回一个字符串,但该方法已被注释为 Produce MIME MediaType of JSON。我的问题是,最终返回的响应(doc)是 JSONObject 还是只是一个 json 字符串(因此是 JSON 格式的字符串)。这样我就可以知道在收到响应时如何处理。

    @Path("/membership/{pageNumber}")
    @GET
    @Produces("application/json")
    public String getAll(@PathParam("pageNumber") String pageNumber){

        Map<String , String > params = new HashMap<>();
        String doc = HTTPClient.sendGet("localhost:9500/users/list/membership/field/"
                      +pageNumber, params, 60);

        return doc;
    }

这对我的文档也很有帮助。 感谢所有的努力,谢谢。

【问题讨论】:

    标签: java json rest jersey jetty


    【解决方案1】:

    我的问题是,最终返回的响应(文档)是 JSONObject 还是 只是一个 json 字符串(因此是 JSON 格式的字符串)

    是的,它会返回json字符串,如果你想同时发送JSON和HTTP状态,你可以使用Response作为你的返回类型。

    例子:

    @GET
    @Path("/testGet")
    @Produces("application/json")
    public Response testGet() {
        String json = //Create JSON String
        return Response.ok(json, MediaType.APPLICATION_JSON).build();
    }
    

    【讨论】:

    • 请回复,它属于哪个库,因为它不适用于正在导入的库
    • 我是Jax-Rs
    • 哦,对不起,我的返回类型仍然是字符串...我现在已经更改它并且它可以工作了。
    • 非常感谢,真的很有帮助
    【解决方案2】:

    你最终生成了一个 JSON 字符串。

    建议使用实体而不是只返回字符串

    return Response.ok().entity(doc).build();
    

    【讨论】:

    • 你指定的返回语句也返回一个JSON字符串?
    • 非常感谢,非常感谢
    【解决方案3】:

    方法实际上返回了什么

    正是您返回的内容。这是Java。这就是 Java 的工作原理。没有巫术。


    也许你想知道别的。

    所有响应都写入响应输出流。返回类型是什么并不重要。重要的是有一个MessageBodyWriter 知道如何根据@Produces 内容类型将该类型写入输出流。如果返回类型是字符串,那么需要有一个知道如何处理String-application/json 组合的编写器。如果返回类型是JSONObject,那么需要有一个可以处理那个的writer。

    另请参阅: JAX-RS Entity Providers

    客户端无需了解任何 Java 类型(即 Sting、JSONObect 等)。它以字节流形式获取数据,并使用它使用的任何转换方法转换数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-29
      • 2013-05-11
      • 1970-01-01
      • 2020-02-21
      • 1970-01-01
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多