我使用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,以防万一失败,另一个拿起?
谢谢!
答案 0 :(得分:0)
因此,对于相同的URL和http方法,您可以获得不同的有效负载?相同的键“field2”可能在选项A中具有字符串值,在选项B中具有不同的对象?恕我直言,这是API的糟糕设计。
第三方API有什么描述像swagger?这样的描述将帮助您生成具有适当注释的正确POJO。
如果没有此类文档,请尝试使用以下生成器:http://www.jsonschema2pojo.org/
答案 1 :(得分:0)
private static Either<Type1Obj, Type2Obj> getPojoFromJson(String json) {
try {
// Type1Obj from json
return Either.left(obj1);
} catch (IOException e) {
try {
//Type2Obj from json
return Either.right(obj2);
} catch (IOException e1) {
//fallback
}
e.printStackTrace();
}
return null;
}