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

标签 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 时,我们会在浏览器中得到一个空对象。

最佳答案

大多数 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 数据作为字符串返回(您已经在有效的示例中执行了此操作)。

关于java - 返回 JSONObject 时浏览器中的空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14941163/

相关文章:

java - 使用递归从字符串中删除子字符串

java - 在小数点后添加 n 个零

javascript - 遍历嵌套在 JSON 中的结果数组

php - 如何在 laravel 中对 json 对象进行排序

c# - Wcf 休息服务 URL 最大长度

web-services - RESTful 'PATCH' 操作应该返回一些东西吗?

java - 从 ReSTLet 请求中获取 HTTP GET 参数

java - 如何让鼠标点击发生?

java - 派生类可以调用它们的抽象父类的构造函数,调用它们尚未实现的方法吗?

json - MongoDB 在具有未知键的集合中查找