返回JSONObject时浏览器中的空对象

时间:2013-02-18 16:44:44

标签: java json rest

我有这个方法:

@GET
@Path("/myservice")
@Produces(MediaType.APPLICATION_JSON)
public Response mysercice() {

   boolean userExists = false;
   CacheControl cacheControl = new CacheControl();
   cacheControl.setNoCache(true);
   cacheControl.setNoStore(true);

   JSONObject jsonObject = new JSONObject();
   jsonObject.put("userExists", userExists);
   return Response.ok(jsonObject, MediaType.APPLICATION_JSON).cacheControl(cacheControl).build();

}

当访问浏览器中方法的URL时,我得到{},这意味着该对象为空。 所以,我试着用:

return Response.ok(jsonObject.toString(), MediaType.APPLICATION_JSON).cacheControl(cacheControl).build();

所以,我进入浏览器{“userExists”:false} 但我不明白为什么在简单地返回JSONObject时,我们会在浏览器中输入一个空对象。

1 个答案:

答案 0 :(得分:2)

大多数JAX-RS实现都附带了一个将响应实体映射到JSON的提供程序。所以当你写:

return Response.ok(jsonObject, MediaType.APPLICATION_JSON).build();

您基本上是在请求JAX-RS提供程序为您JSONObject编组JSON。唯一的问题是JSONObject并不是真正意味着以这种方式序列化。相反,它意味着用于逐步构建JSON表示,然后将该表示转换为JSON字符串值。您有两种选择:

  1. 创建一个包含您要发送回客户端的所有字段的POJO。在您的方法中返回此POJO,它将自动转换为JSON(`return Response.ok(myPojo,MediaType.APPLICATION_JSON).build()

  2. 直接以字符串形式返回JSON数据(您在示例中已经使用过)。