【问题标题】:REST - How to minify Json ResponseREST - 如何缩小 Json 响应
【发布时间】:2013-07-17 04:48:29
【问题描述】:

我有一个返回对象列表的 JAVA REST 服务。每个对象都包含名称、描述、代码。 我想缩小响应 json

{
    "objects": {
        "count": 10000,
        "list": [
            {
                "name": "1",
                "description": "foo",
                "code": "foo",
            },
            {
                "name": "2",
                "description": "bar",
                "code": "bar",
            },
            ...... (1.000 items)
        ]
    }
}

到:

{
    "a": {
        "b": 1000,
        "c": "a:objects,b:count,c:mapping,d:list,e:name,f:description,g:code",
        "d": [
            {
                "e": "1",
                "f": "foo",
                "g": "foo",
            },
            {
                "e": "2",
                "f": "bar",
                "g": "bar",
            },
            ...... (1.000 items)
        ]
    }
}

我该怎么做,谢谢。

【问题讨论】:

  • 您的服务在 .NET 中吗?爪哇? php?这是这个问题的重要信息。
  • 抱歉,我的服务是 JAVA 的
  • 没有足够的信息来说明您当前正在使用什么。

标签: java json rest minify


【解决方案1】:

即使我们不知道您使用的是什么特定技术。我将假设您正在使用某种 REST 库,例如 Spring 或 JaxRS,并且您正在将 POJO 序列化为 JSON。我还将假设您已完成所有设置并为该配置工作,我将重点关注使用该设置的输出。

如果你在 POJO 中使用了类似 Jackson 的东西,你可以在你的类中添加以下 Annotation:

public class MyResponseObject {
    @JsonProperty("a")
    private MyObject objects;

    public MyObject getObjects() { return objects; }
    public void setObjects(MyObject object) { this.objects = object; }
}

public class MyObject {
    @JsonProperty("b")
    private long count;
    @JsonProperty("d")
    private List<Item> list;

    // getters/setters
}

public class Item {
    @JsonProperty("e")
    private Sting name;
    @JsonProperty("f")
    private String description;
    @JsonProperty("g")
    private String code;

    // getters/setters
}

关于每个含义的映射,您可以对该映射进行硬编码/编码,但我认为没有一种自动的方法可以做到这一点。您还可以在您的方法的 JavaDoc 中包含该映射的内容。另一种选择是,如果这是一个对其他服务公开的 API,您不仅可以提供文档,还可以提供一个带有您的 API 输出的 POJO 的打包 Jar。这样,他们所要做的就是将您的 jar 文件作为依赖项包含在内,并将它们包含在映射的类中。

我希望这有助于引导您朝着正确的方向前进。

另外,如果您不使用 Jackson,但更喜欢 JAXB,请使用 @XmlElement(name="a")

【讨论】:

  • 是的,Gson 还支持通过使用@SerializedName("a") 注释字段来更改字段名称
猜你喜欢
  • 2018-07-07
  • 2013-11-02
  • 1970-01-01
  • 2014-02-20
  • 2019-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-06
相关资源
最近更新 更多