Я унаследовал 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 отображается. Это способ сделать это или это плохой вариант ?
===============================
Я также читал о создании пользовательских загрузчиков шаблонов, но я не совсем понимаю, где их разместить, или мне это нужно, так как у меня собран шаблон.
Может кто-нибудь сказать мне, где я иду не так?