我有以下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;
}