使用Jackson JSON映射休息响应

时间:2014-01-08 19:20:51

标签: rest jackson

我有一个REST来电,可以返回AccountPojoErrorCodePojo。每个都有特定的字段。如何使用Jackson JSON图书馆轻松解析回复并获取AccountPojoErrorCodePojo

我有类似的东西:

ObjectMapper mapper = new ObjectMapper();
try {
   ret = mapper.readValue(json, AccountPojo.class);
} catch (JsonProcessingException e) {
   ret = mapper.readValue(json, ErrorCodePojo.class);
}

但我不认为这很好。

谢谢!

1 个答案:

答案 0 :(得分:0)

您也可以使用ObjectMapper#convertValue方法。使用此方法,您的解析算法可能如下所示:

  1. 将JSON反序列化为Map类。
  2. 检查地图是否包含来自班级AccountPojo / ErrorCodePojo的属性。
  3. 将地图转换为目标类。
  4. 例如,假设您的ErrorCodePojo类看起来像这样:

    class ErrorCodePojo {
    
        private int errroCode;
        private String message;
    
        //getters, setters
    }
    

    属性errroCode仅存在于ErrorCodePojo中。 AccountPojo不包含此属性。

    // Step 1
    Map<?, ?> value = mapper.readValue(json, Map.class);
    // Step 2
    if (value.containsKey("errroCode")) {
        // Step 3
        mapper.convertValue(value, ErrorCodePojo.class);
    } else {
        // Step 3
        mapper.convertValue(value, AccountPojo.class);
    }