javax.ws.rs: 方法实际返回的是什么

javax.ws.rs: What is Actually Returned by a Method

正在研究 REST API。这个示例在这里工作正常,但我真的对这里的某些东西感到困惑。我的方法 getAll returns 一个字符串,但该方法已被注释为生成 JSON 的 MIME 媒体类型。我的问题是,最终返回的响应 (doc) 是一个 JSON 对象还是一个 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;
    }

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

My question is , is the final returned response (doc) a JSONObject or just a json String(Thus a String in JSON format)

是的,它会 return json String,如果你想一起发送 JSON 和 HTTP 状态,你可以使用 Response 作为您的 return 类型。

示例:

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

What is Actually Returned by a Method

正是你return。这是Java。这就是 Java 的工作原理。没有巫术。


也许您想知道其他事情。

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

另请参阅: JAX-RS Entity Providers

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

你终于产生了一个 JSON 字符串。

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

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