【问题标题】:Rest WS partial JSON response休息 WS 部分 JSON 响应
【发布时间】:2019-05-18 22:55:59
【问题描述】:

在写这个问题之前,我已经尝试了很多在网上找到的帖子。

我想在我的 REST 网络服务中获得部分 JSON 响应。 首先,我试图返回一个 JSONArray 但我得到了

"没有找到类型的返回值的转换器:类 org.json.JSONArray"

然后我尝试返回一个 JSONObject 列表,我得到了

"com.fasterxml.jackson.databind.exc.InvalidDefinitionException: 否 为类 org.json.JSONObject 找到序列化程序,但没有属性 发现要创建 BeanSerializer(为避免异常,禁用 SerializationFeature.FAIL_ON_EMPTY_BEANS)(通过引用链: java.util.ArrayList[0])"

当我在 application.properties 中将 SerializationFeature.FAIL_ON_EMPTY_BEANS 设置为 false 时,我会得到一个空 JSONObject 列表,例如:{}

我在 GitHub 上与您分享我的代码:https://github.com/AbderrahmenISSA/StockManagement/blob/master/src/main/java/com/stockmgt/controllers/v3/ProductControllerV3.java

【问题讨论】:

  • 如果通过部分 json 响应您的意思是仅包括实体的一些属性,例如,我发现不那么痛苦的方法是将单独的 DTO(数据传输对象)实现为具有公共成员的类和没有方法。如果您不知道 DTO 是什么,请在 google 上搜索,上面有很多资料(赞成和反对)。
  • 我已经在使用 DTO。问题是动态的: - 一个用户只能检索一个字段:/products?select=productName - 另一个调用:/products?select=productName,productCode - 另一个调用:/products?select=productName,productCode,category.categoryName -...所以我们不能创建尽可能多的 DTO 组合

标签: java json rest spring-boot


【解决方案1】:

在您的 DTO 中将您不喜欢检索的属性设置为 null。 (用一个简单的算法来做)

然后将您的序列化程序配置为在 json 响应中不包含空字段。 (有时这是默认行为)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-22
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多