定义POJO以更改JSON响应

时间:2018-02-13 19:08:58

标签: java json spring jackson2

我使用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,以防万一失败,另一个拿起?

谢谢!

2 个答案:

答案 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;
}