java - 无法从我的 rest api 检索 JSONObject

标签 java jersey-2.0 json

所以我最近从 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 数据:

  1. 依赖项:如果您使用 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 添加到您的类路径中。

  1. 定义 POJO 以包含要序列化为 JSON 的数据,例如,

    public class User {
       private String username;
       private String email;
    
       // getters + setters
    }
    
  2. 相应地修改您的资源方法:

    @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/

相关文章:

java - Maven 'site' 依赖类型是什么?

java - 通过文本文件读取货币金额并计算钞票面额

java - JerseyServlet 在服务器启动时初始化资源

json - 编码 JSON 对象时如何避免使用引号

java - 如何使用 JSF 2.0 在网站上添加 Facebook 登录帐户

java - 为什么工厂模式中的getInstance()方法应该是静态的?

json - 让 Jersey 2.x POJO JSON 支持与 Jetty 一起工作

java - POST 到 Jersey REST 服务时出现错误 415 不支持的媒体类型

php - 从json文件添加到mysql db数据

javascript - 使用 Node.js 的 JSON 数据