【发布时间】:2018-07-24 05:50:46
【问题描述】:
我正在使用 Java 8/Spring 5 调用第三方 API。我正在使用运行良好的 HttpClient,并且我有一个 99% 的时间都可以运行的 POJO。
当我调用这项服务时,JSON 看起来像:
{"field1":"a",
"field2":"b",
"field3:"c"}
根据不同的参数,它可以返回为:
{"field1":"a",
"field2":{
"subfield1:"x",
"subfield2:"y",
"subfield3":"z"},
"field3:"c"}
我正在使用最新的 FastJacksonMapper 将 JSON 字符串转换为 Java POJO,它在第一个实例中有效,但在第二个实例中无效。
我知道 JSON 根据请求进行更改可能很常见,但我希望 JSON 更加一致。
关于如何调整我的 POJO 有什么想法吗?我可以使用任何 JSON 注释来解决这个问题吗?或者,也许创建一个单独的 POJO,以便在一个失败的情况下,另一个接手?
谢谢!
【问题讨论】:
-
您希望原始值还是对象作为
field2的一部分?如果您期望两者(基于参数),那么对于您的 API 和使用它的客户端来说,这是一个糟糕的设计。这将造成很多麻烦(现在和将来)。后果自负。 -
这不是我的 API ...我绝对不会那样做。这是来自第三方的 API,完全是另一家公司。我同意,这个设计是个问题。最棒的是,这家公司就在我们隔壁,我会走过去和 CEO 交谈。 :-D 他们真的是一群好人!
-
我明白了......问题:它是否始终如一地返回具有给定参数集的值和具有不同参数集的对象? - 如果收到的响应与提交的参数一致,那么您至少可以有两种单独的方法(使用不同的映射器)并根据您发送的参数使用一种或另一种。换句话说,既然您知道自己要问的是哪种类型的问题,那么您就可以根据它来调整答案的处理方式