Step 1
@Configuration
public class VelocityConfig {
@Bean
public VelocityEngine velocityEngine() {
Properties properties = new Properties();
properties.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");
properties.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());
VelocityEngine velocityEngine = new VelocityEngine();
velocityEngine.init(properties);
return velocityEngine;
}
}
Step 2
public class VelocityTemplateProcessor {
private final VelocityEngine velocityEngine;
public VelocityTemplateProcessor(VelocityEngine velocityEngine) {
this.velocityEngine = velocityEngine;
}
public String processTemplate(String templateName, Map<String, Object> model) {
Template template = velocityEngine.getTemplate(templateName);
VelocityContext context = new VelocityContext(model);
StringWriter writer = new StringWriter();
template.merge(context, writer);
return writer.toString(); // Return final processed content
}
}
Step 3
@RestController
public class MyController {
private final VelocityTemplateProcessor velocityProcessor;
public MyController(VelocityTemplateProcessor velocityProcessor) {
this.velocityProcessor = velocityProcessor;
}
@GetMapping("/welcome")
public String generateWelcomeMessage() {
Map<String, Object> model = new HashMap<>();
model.put("username", "Pawan");
return velocityProcessor.processTemplate("templates/welcome.vm", model);
}
}
step 4
Located in src/main/resources/templates/welcome.vm
: