我的目标是使用自由标记或任何其他聪明的方法将java map的集合格式化为字符串(基本上是csv)。我想使用存储在数据库中并从管理应用程序管理的配置数据生成模板。 配置将告诉我在给定数据(哈希映射中的键)需要去的位置,以及在应用给定位置之前是否需要对此数据运行任何脚本。如果数据不在地图中,则多个位置可能为空白。 我正在考虑使用free-marker来构建这个通用工具,如果你能分享我应该如何解决这个问题,我将不胜感激。
还想知道Spring-integration中是否有任何内置的支持来构建这样的进程,因为应用程序是SI应用程序。
答案 0 :(得分:2)
我不是免费标记专家,但快速查看他们的快速入门文档让我在这里......
public class FreemarkerTransformerPojo {
private final Configuration configuration;
private final Template template;
public FreemarkerTransformerPojo(String ftl) throws Exception {
this.configuration = new Configuration(Configuration.VERSION_2_3_23);
this.configuration.setDirectoryForTemplateLoading(new File("/"));
this.configuration.setDefaultEncoding("UTF-8");
this.template = this.configuration.getTemplate(ftl);
}
public String transform(Map<?, ?> map) throws Exception {
StringWriter writer = new StringWriter();
this.template.process(map, writer);
return writer.toString();
}
}
和
public class FreemarkerTransformerPojoTests {
@Test
public void test() throws Exception {
String template = System.getProperty("user.home") + "/Development/tmp/test.ftl";
OutputStream os = new FileOutputStream(new File(template));
os.write("foo=${foo}, bar=${bar}".getBytes());
os.close();
FreemarkerTransformerPojo transformer = new FreemarkerTransformerPojo(template);
Map<String, String> map = new HashMap<String, String>();
map.put("foo", "baz");
map.put("bar", "qux");
String result = transformer.transform(map);
assertEquals("foo=baz, bar=qux", result);
}
}
从Spring Integration流程中,将带有Map
有效负载的消息发送到
<int:transformer ... ref="fmTransformer" method="transform" />
或者您可以使用groovy script(或其他受支持的脚本语言)使用Spring Integration的现有scripting support而不编写任何代码(脚本除外)。