所以我最近从 Jersey 1.x 转移到 2.x,在一长串问题之后终于让它工作了。但是每当我尝试访问返回 JSONObject 的资源时,我都会遇到问题。首先,这是我的示例方法:
@GET
@Path("/foobar")
@Produces(MediaType.APPLICATION_JSON)
public JSONObject print2() throws JSONException {
JSONObject jsonObject = new JSONObject();
jsonObject.put("hi", 22);
return jsonObject;
}
现在,如果我将 Jettison 1.3.8 用于我的 JSONObject,如果我尝试访问此资源,我会得到以下信息:
{"escapeForwardSlashAlways":true}
不确定那里发生了什么。然后我尝试了一些旧版本的 Jettison 和 org.json 但这些给了我这个问题:
No serializer found for class org.json.JSONObject and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) )
当这种方法在 Jersey 1.x 上工作正常时,我不确定为什么会遇到这些问题。
最佳答案
假设您使用的是 Servlet 3.0 及更高版本,以下示例可能会帮助您设置环境以使用 JSON 数据:
依赖项:如果您使用 Maven,则需要以下依赖项:
<dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet</artifactId> <version>2.23.2</version> </dependency> <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-jackson</artifactId> <version>2.23.2</version> </dependency>
如果您没有使用 Maven,则需要将相应的 jar 添加到您的类路径中。
定义 POJO 以包含要序列化为 JSON 的数据,例如,
public class User { private String username; private String email; // getters + setters }
相应地修改您的资源方法:
@GET @Path("/foobar") @Produces(MediaType.APPLICATION_JSON) public User print2() { User jsonObject = new User(); jsonObject.setUsername("Me"); jsonObject.setEmail("my@email.com"); return jsonObject; }
打包部署,输出应该是:
{ "username": "Me", "email": "my@email.com" }
注意:此示例已部署并在 Tomcat 8.5.5 上运行。
关于java - 无法从我的 rest api 检索 JSONObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40064139/