我有这个方法:
@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 字符串值。您有两个选择:
创建一个 POJO,其中包含要发送回客户端的所有字段。在您的方法中返回此 POJO,它将自动转换为 JSON (`return Response.ok(myPojo, MediaType.APPLICATION_JSON).build()
直接将 JSON 数据作为字符串返回(您已经在有效的示例中执行了此操作)。
关于java - 返回 JSONObject 时浏览器中的空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14941163/