import org.springframework.web.bind.annotation.*; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.core.type.TypeReference; import java.util.List; import java.util.Map; @RestController public class MandrillWebhookController { @PostMapping("/webhook-mandrill") public String handleMandrillWebhook(@RequestParam("mandrill_events") String mandrillEventsJson) { try { ObjectMapper mapper = new ObjectMapper(); // El campo es un JSON Array en String, por eso se parsea así List> eventos = mapper.readValue(mandrillEventsJson, new TypeReference>>(){}); for (Map evento : eventos) { String tipoEvento = (String) evento.get("event"); Map msg = (Map) evento.get("msg"); String email = (String) msg.get("email"); switch (tipoEvento) { case "open": System.out.println("Correo abierto: " + email); break; case "click": System.out.println("Clic en correo: " + email); break; case "hard_bounce": System.out.println("Rebote permanente: " + email); break; case "spam": System.out.println("Marcado como spam: " + email); break; // Agrega los casos que necesites default: System.out.println("Evento recibido: " + tipoEvento + " para " + email); } } } catch (Exception e) { e.printStackTrace(); } // Mandrill espera un 200 OK return "ok"; } }