Как я могу вернуть шаблон Freemarker к запросу RESTful? - PullRequest
0 голосов
/ 08 апреля 2019

Я унаследовал Spring Boot приложение, которое возвращает файл, загружает шаблон Freemarker для вызова REST, и я пытаюсь изменить его, чтобы использовать вместо него загруженный шаблон БД.

Я прочитал много постов здесь и в другом месте, и я дошел до того, что могу создать Шаблон из БД, и я могу обработать его с помощью моей Модели , но я могу ' не могу понять, как я возвращаю его на вызов RESTful Я продолжаю получать ошибку 500 в момент, когда я возвращаю новый шаблон.

Файловая система в настоящее время возвращает объект ModelAndView ... но я не знаю, что происходит в этот момент, поэтому я не могу понять, как использовать мой шаблон вместо этого.

Файловый подход

    @RequestMapping(
            method = {RequestMethod.GET},
            value = "/os/mgr/order/{barcode}.html",
            produces = MediaType.TEXT_HTML_VALUE
    )
    public ModelAndView viewOrder(@PathVariable("barcode") String barcode,
                                  @RequestParam(value = "smsSent", required = false) boolean smsSent,
                                  Device device, HttpServletResponse response)
            throws Exception {
....
//Does some work such as building a Freemarker View object and adds the Model with the correct filename. 
//This file approach is exactly why I want to use DB as there are dozens of template files requiring individual updating = PIA
....
return modelAndView;
}

Ниже описано, как я создаю объект Template с некоторыми базовыми тестами для проверки применения модели. Я просто не могу понять, как вернуть шаблон в запрос REST .

Подход на основе БД

FreeMarkerConfigurationFactoryBean bean = new FreeMarkerConfigurationFactoryBean();

VendorTemplate vendorTemplate = vendorTemplateService.getTemplateByVendor(order.getVendor());
StringTemplateLoader stringLoader = new StringTemplateLoader();
String firstTemplate = "firstTemplate";
stringLoader.putTemplate(firstTemplate, vendorTemplate.getTemplate());
Configuration cfg = new Configuration();
cfg.setTemplateLoader(stringLoader);
Template template = cfg.getTemplate(firstTemplate);

Map<String, Object> input = new HashMap<String, Object>();
input = buildModelForOrderPage(input);

//I used this just to check the model was being applied to the loaded template
Writer consoleWriter = new OutputStreamWriter(System.out);
template.process(input, consoleWriter);

Writer fileWriter = new FileWriter(new File("output.html"));
try {
    template.process(input, fileWriter);
} finally {
    fileWriter.close();
}

StringWriter stringWriter = new StringWriter();
template.process(input, stringWriter);

===============================

EDIT Я изменил тип возврата на ResponseEntity, а возврат на

return ResponseEntity
            .status(200)
            .header("Content-Type", "text/html")
            .body(builtTemplate);

и мой HTML отображается. Это способ сделать это или это плохой вариант ?

===============================

Я также читал о создании пользовательских загрузчиков шаблонов, но я не совсем понимаю, где их разместить, или мне это нужно, так как у меня собран шаблон.

Может кто-нибудь сказать мне, где я иду не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...