Я пытаюсь использовать handlebars.java для применения данных json. Я взял приведенный ниже пример из https://github.com/jknack/handlebars.java, где он был для handlebars.js, и я ожидаю, что то же самое будет работать в handlebars.java
public class TestHandlebars {
public static void main(String[] args) throws Exception {
String json = "{\"name\": \"world\"}";
Handlebars handlebars = new Handlebars();
handlebars.registerHelper("json", Jackson2Helper.INSTANCE);
Context context = Context
.newBuilder(json)
.resolver(JsonNodeValueResolver.INSTANCE,
JavaBeanValueResolver.INSTANCE,
FieldValueResolver.INSTANCE,
MapValueResolver.INSTANCE,
MethodValueResolver.INSTANCE
)
.build();
Template template = handlebars.compileInline("Hello {{name}}!");
System.out.println(template.apply(context));
}
}
Я ожидаю, что
Привет мир!
тогда как я получаю только
Здравствуйте !
Что мне не хватает? Я видел примеры, подобные просмотрам Jackson, с помощью java-модели "Блог" на странице https://github.com/jknack/handlebars.java, но не может ли это быть достигнуто без использования объектов Java-модели для этого json?
Просто выяснилось, что передача json в качестве объекта JsonNode работает.
public class TestHandlebars {
public static void main(String[] args) throws Exception {
String json = "{\"name\": \"world\"}";
JsonNode jsonNode = new ObjectMapper().readValue(json, JsonNode.class);
Handlebars handlebars = new Handlebars();
handlebars.registerHelper("json", Jackson2Helper.INSTANCE);
Context context = Context
.newBuilder(jsonNode)
.resolver(JsonNodeValueResolver.INSTANCE,
JavaBeanValueResolver.INSTANCE,
FieldValueResolver.INSTANCE,
MapValueResolver.INSTANCE,
MethodValueResolver.INSTANCE
)
.build();
Template template = handlebars.compileInline("Hello {{name}}!");
System.out.println(template.apply(context));
}
}
Используя Gson, вы можете сделать это очень легко, не регистрируя кучу конвертеров.
String data = "{\"subject\": \"World\"}";
String decoration = "Hello {{subject}}!";
Handlebars handlebars = new Handlebars();
Gson gson = new Gson();
Type type = new TypeToken<Map<String, Object>>(){}.getType();
Map<String, Object> map = gson.fromJson(data, type);
Template template = handlebars.compileInline(decoration);
Context context = Context.newBuilder(map).build();
String output = template.apply(context);