メソッド呼出時、引数にJSON(マップ)を渡せます。
Javaのテンプレートエンジン Velocityでメソッド呼出時、引数にJSONを渡せます。
色々いじってみて知りました。
方法は引数のところに{ "key1": "value1"....のように普段のJSONと同じく書けばいいです。
実際メソッドの引数に渡されるオブジェクトはMapです。
以下のサンプルを参照して下さい。
import java.io.StringWriter; import java.util.Map; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import org.apache.velocity.context.Context; public class TestVelocityJson { // テンプレートで使うBeanクラス。 public static class TestBean { public void duke(Map<String, Object> t) { // 適切にキャストして使用します。 String param1 = (String) t.get("param1"); int param2 = (int) t.get("param2"); System.out.println("param1: " + param1); System.out.println("param2: " + param2); } } public static void main(String[] args) throws Exception { { // メソッド呼出。 String template = "${testBean.duke({\"param1\" : \"v1\", \"param2\": 11})} "; Context vc = new VelocityContext(); vc.put("testBean", new TestBean()); StringWriter sw = new StringWriter(); System.out.println("-- Test1 -- "); Velocity.evaluate(vc, sw, "test", template); /* * 結果 * -- Test1 -- * param1: v1 * param2: 11 */ } { // マクロからメソッド呼出。 String template = "#macro(dukeTest $p) " + " $testBean.duke($p) " + "#end " + "#dukeTest({\"param1\" : \"v2\", \"param2\": 22})"; Context vc = new VelocityContext(); vc.put("testBean", new TestBean()); StringWriter sw = new StringWriter(); System.out.println("-- Test2 -- "); Velocity.evaluate(vc, sw, "test", template); /* * 結果 * -- Test2 -- * param1: v2 * param2: 22 */ } } }