【问题标题】:How to return response of JSONArray in Jackson framework rest api's?如何在 Jackson 框架 rest api 中返回 JSONArray 的响应?
【发布时间】:2021-01-05 16:20:41
【问题描述】:
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getData(@QueryParam("id") long id) throws Exception {
    JSONArray json = (getting some json data from db)
    ObjectMapper obj = new ObjectMapper();
    return Response.ok(obj.writeValueAsString(json)).build();
}

我试图像这样返回 json 数组,但得到这样的错误。

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.json.JSONArray and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) 

谁能帮我序列化这个并提供响应。提前致谢。

【问题讨论】:

标签: java jackson jersey-2.0 jackson2


【解决方案1】:

如果你使用spring,那么你不需要JSONArray,只需创建一个简单的POJO类,其中包含所有gettersetter,并使用ObjectMapper将JSON解析为该对象,然后编写POJO要响应的类,如下所示:

public ResponseEntity<DummyObject> getData(@QueryParam("id") long id) throws Exception 
    DummyPojo obj = mapper.readValue(json, DummyPojo.classs);
    return ResponseEntity.ok(obj)
}

// Replace DummyObject with your class

Spring会自动转成json,更多请查看此链接info

【讨论】:

  • 我同意你的回答,我知道这一点。但是这里我的要求是不要 POJO 类。
  • 但是 JSONObject 和 JSONArray 的问题是它们无法转换为 json,因为它们没有 getter/setter 或 Jackson 用来反序列化/序列化为 json 的任何其他方式,而 Jackson 默认注册为 json序列化器/反序列化器因此很难实现,可能需要一些额外的配置或代码。
  • 如果你已经有 json 字符串,不要将其转换为 JSONArray 或 JSONObject,直接将其写入响应并从函数返回 String,应该可以。
猜你喜欢
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-30
  • 1970-01-01
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
相关资源
最近更新 更多