使用Jersey为GET请求返回JSON时,没有为JSONObject找到序列化程序

时间:2017-03-02 21:28:44

标签: java json rest jersey

我使用Jersey来实现REST apis。除了所有端点之外,我想创建一个列出所有端点及其用法的about页面。

@GET
@Produces(MediaType.APPLICATION_JSON)
public Response displayInfo() {
    JSONObject json = createInfoJson();
    return Response.ok(json).build();
}
/////////////////////////////////////////
public static JSONObject createInfoJson() {
    JSONArray ja = new JSONArray();

    JSONObject jo1 = new JSONObject();
    jo1.put("baseurl", "/tests/");
    jo1.put("description", "Basic Information page");
    jo1.put("example", "/tests/");
    ja.put(jo1);

    JSONObject jo2 = new JSONObject();
    jo2.put("baseurl", "/tests/sendmsg");
    jo2.put("description", "Run Kafka Test");
    jo2.put("example", "/tests/sendmsg?count=100");
    ja.put(jo2);
    ja.put(jo2);

    JSONObject json = new JSONObject();
    json.put("name", "Kafka Messaging Test");
    json.put("endpoints", ja);

    return json;
}

当我在浏览器中点击about页面时,出现以下错误:

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返回JSONObject对象的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

您正在尝试将JSONObject序列化为JSON,它不会以这种方式工作(错误解释了原因)。但是你至少有两个选择:

  1. json序列化为String:

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response displayInfo() {
        JSONObject json = createInfoJson();
        return Response.ok(json.toString()).build();
    }
    
  2. 为您的回复创建模型/ POJO,并使用它代替JSONObject。