You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何向SendGrid动态模板传入复杂对象作为渲染参数

问题原因

你代码的问题在于两点:

  1. addDynamicTemplateData 方法本身就是将键值对写入SendGrid请求的dynamic_template_data节点,不需要你手动将dynamic_template_data作为键名传入
  2. 你把TemplateObject序列化为JSON字符串传入,相当于给模板传入了一个字符串类型的参数,而不是结构化的对象/数组,模板的Mustache语法自然无法解析嵌套字段和循环逻辑。

正确实现代码

你可以直接将TemplateObject转换为JsonObject后遍历,批量添加所有动态参数:

Mail mail = new Mail();
Email fromEmail = new Email();
fromEmail.setName("shri");
fromEmail.setEmail("shrikant.sharma606@gmail.com");
mail.setFrom(fromEmail);
mail.setTemplateId("d-xxxx");
Personalization personalization = new Personalization();
Gson gson = new Gson();
// 将TemplateObject转为结构化的JsonObject,不要转成字符串
JsonObject templateJson = gson.toJsonTree(templateObject).getAsJsonObject();
// 遍历所有属性,逐个添加到动态模板数据中
for (Map.Entry<String, JsonElement> entry : templateJson.entrySet()) {
    Object value = gson.fromJson(entry.getValue(), Object.class);
    personalization.addDynamicTemplateData(entry.getKey(), value);
}
personalization.addTo(new Email("abcd@gmail.com"));
mail.addPersonalization(personalization);

这个写法可以完美兼容你定义的所有字段类型,包括布尔值、字符串、嵌套对象、列表,和你在SendGrid网页端测试的JSON结构完全一致,模板的Mustache语法可以正常解析所有变量、循环和判断逻辑。


内容的提问来源于stack exchange,提问作者shrikant.sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:45:04