我有这个方法:
@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时,我们会在浏览器中输入一个空对象。
答案 0 :(得分:2)
大多数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数据(您在示例中已经使用过)。