春季休息模板试图解析JSON响应并以getters和setter的形式对其进行建模



我有以下json在春季休息模板中解析。我看不到我该怎么做。我从未见过这样的JSON,但这是有效的JSON响应。这就是我尝试的:

 @jsonignoreuknown(true)
class smsresponse { 
    private String status;
    private String message;
    private Data data;
    getters/setters
    }
    class Data {
    private String group_id;
    private Map<String,SummaryPOJO> map;
    getters/setters
    }
    class SummaryPOJO {
    private String id;
    private String mobile;
    private String status;
    rest of fields
    getteers/setters
    }
restTemplate.exchange(url,method,null,some paramterhere)

是正确的方法吗?

 {
        "status": "OK",
        "data": 
        {
            "group_id":zzz,
            "0":
            {
                "id": "wewew-1wewewew",
                "customid": "1",
                "customid1": "",
                "customid2": "",
                "mobile": "9190********",
                "status": "AWAITED-DLR",
                }         
               "1":
                {
                "id": "2758-2",
                "customid": "2",
                "customid1": "",
                "customid2": "",
                "mobile": "9190********",
                "status": "AWAITED-DLR",
                }            
              }
                ...
        }
        "message": "Campaign Submitted successfully"
    }

如果使用春季启动RESTTEMPLATE,例如Maven,则自动将Jackson作为依赖关系,该依赖项将您的响应对象映射而无需任何其他代码。正确调用它并指定您的预期类smsresponse,杰克逊将为您映射。使用restTemplate.getForObject(...)restTemplate.postForObject(...)而不是restTemplate.exchange(...)进行获取和发布的方法要容易得多,但这在很大程度上取决于您的需求。此方法在设置标头等方面有一些限制。

春季文档提供了许多好的例子:https://docs.spring.io/spring-framework/docs/current/spring-framework-reference-reference/html/remoting.html

此答案可能并不适合所有人,但它有助于我的时间。

 public SmsResponse sendSMS(String recipient, String dynamicMessage) throws Exception {
    String message = URLEncoder.encode(dynamicMessage, "UTF-8");
    String requestUrl = MessageFormat.format(getApiEndPoint(), recipient, message);
    System.out.println("Printing request url from property message" + requestUrl);
    Map<String, Object> smsResponse = getRestTemplate().getForObject(requestUrl, Map.class);
    return createSMSResponseClass(smsResponse);
  }
  private SmsResponse createSMSResponseClass(Map<String, Object> map) {
    SmsResponse smsResponse = new SmsResponse();
    if (map.containsKey("status")) {
      smsResponse.setStatus((String) map.get("status"));
    }
    if (map.containsKey("message")) {
      smsResponse.setMessage((String) map.get("message"));
    }
    if (map.containsKey("data")) {
      Map<String, Object> data = (Map<String, Object>) map.get("data");
      if (data.containsKey("group_id")) {
        smsResponse.setGroupId((String) map.get("group_id"));
}
        if (data.containsKey("0")) {
          Map<String, Object> metaData = (Map<String, Object>) data.get("0");
          ObjectMapper mapper = new ObjectMapper();
          SMSMetaDataObject smsMetaDataObject =
              mapper.convertValue(metaData, SMSMetaDataObject.class);
          smsResponse.setSmsMetaDataObject(smsMetaDataObject);
        }
    }
    logger.info(String.format("Printing sms response object %s", smsResponse.toString()));
    return smsResponse;
  }

最新更新