如何在HTTP客户端库中返回JSON?

时间:2017-06-24 13:37:00

标签: java json rest http

我想创建一个库来执行身份验证(在请求中发送一些身份验证参数)并从API返回json响应。 JSON通常代表一组字典,如下所示:

[
  {"a": 1, "b": 2},
  {"a": 3, "b": 1}
]

我在Python中做了同样的事情,并且很简单,我只返回dict内置的Python

我想知道Java中最好的方法是什么?以下是我考虑的一些方法:

  1. 返回将由用户处理的流。具体来说,我使用java.net.HttpURLConnection,通过这种方法,我将返回connection.getInputStream(),这将由用户处理。这种方法的缺点是用户需要完成大部分工作(读取流并将其转换为类似json的对象或其他)。好的部分是用户可以灵活地以他们喜欢的任何方式处理它,使用第三方json库或其他东西从类创建自定义对象。通过这种方法,我不强迫它们使用某些库,因为整个代码将使用Java内置函数。
  2. 使用第三方库,例如org.jsonGSON,并返回该类型的对象。这里的缺点是我会强迫用户使用第三方库。
  3. 我可以为每种对象定义类,可能有5-6种类。缺点是:我需要更多时间来实现解决方案,并强制用户使用我的对象。
  4. 困扰我的是Python开发人员经常使用dict,而在Java中,开发人员通常更喜欢使用特定用户定义类的对象。所以,我不能总结出最合适的方式。

1 个答案:

答案 0 :(得分:1)

HTTP API的任何端点都有一个已定义的响应结构(或至少它应该)。库实现的方法应返回表示响应有效负载的POJO。最终用户不需要知道API以JSON格式化有效负载。如果API有一天决定使用XML,则该更改应对您的库用户透明。

编辑:简单地返回字典,或者地图类型是不好的做法。这样做会强制库的用户采用响应中每个属性的键字符串和值类型。 POJO提供了响应属性名称及其值类型的清晰定义。