Не выходит распарсить ответ. Интересует объект message, необходимо свойство "message-id". Заранее спасибо за помощь и советы!
{
"tags": [],
"message": {
"headers": {
"to": "yu@mail.ru",
"message-id": "20170523133300.17012.6289DB38@va.com",
"from": "Aa Support <customer@va.com>",
"subject": "Welcome to Ava Online Provider Portal"
},
"attachments": [],
"size": 11659
},
"recipient": "yu@mail.ru",
"event": "delivered"
}
controller
@RequestMapping(value = "mailgun/webhook/delivered", method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public void maigunWebhook(Webhook webhook) throws NoSuchAlgorithmException, InvalidKeyException {
log.warn("Webhook " + webhook);
notificationFormService.updateStatusMail(webhook);
}
Строчка из лога
Webhook{message=null, event=delivered, recipient='yu@mail.ru'}
entity
@JsonIgnoreProperties(ignoreUnknown = true)
public class Webhook {
public WebhookMsg message;
private String event;
private String recipient;
private String timestamp;
private String token;
private String signature;
GETTER & SETTER
}
@JsonIgnoreProperties(ignoreUnknown = true)
public class WebhookMsg {
public WebhookHeaders headers;
GETTER & SETTER
}
public class WebhookHeaders {
String to;
@JsonProperty("message-id")
String messageId;
String from;
String subject;
GETTER & SETTER
}
Можно использовать gson для этого (https://mvnrepository.com/artifact/com.google.code.gson/gson). Для json'а, который вы привели в пример, можно использовать этот код:
String jsonContent = "содержимое json";
JsonObject jsonObj = new Gson().fromJson(jsonContent, JsonObject.class);
String messageID = jsonObj.getJSONObject("message").getJSONObject("headers").getString("message-id);
Вопрос возник по собственной неосведомленности. Ответ от сервиса Mailgun приходит в формате:
content-type=application/x-www-form-urlencoded
соответственно это просто набор параметров и парсит spring в соответствии с названием полей. Вопрос решился следующим кодом, может кому и пригодится:
@RequestMapping(value = "mailgun/webhook/delivered",
method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public void maigunWebhook(@RequestParam("Message-Id") String messageId, Webhook webhook){
webhook.setMessageId(messageId);
//........
}
По скольку в Java мы не можем указать имя ссылки "Message-id", пришлось парсить отдельным параметром с помощью аннотации @RequestParam с явным указанием его названия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости