Как использовать JSON с Handlebars.java

1

Я пытаюсь использовать 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?

Теги:
handlebars.js

2 ответа

4

Просто выяснилось, что передача 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));
    }
}
  • 5
    в конечном счете, это моя проблема с handlebars.java ... для всех его наворотов они не смогли предоставить простой пример, который принимает строку JSON или объект Java Map в качестве входных данных для шаблона ... но если я не нашел рули .java так расстраивает, я бы не узнал, что есть отдельный проект, который также является производным от mustache.js, который называется точно mustache.java
1

Используя 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);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню