SpringBoot中如何将Model变量转换为Context变量?
SpringBoot中Model转模板引擎Context的问题
当前代码
model.addAttribute("var1", var1); model.addAttribute("var99", var99);
目标重构代码
Context ctx = new Context(); ctx.setVariable("var1", var1); ctx.setVariable("var99", var99);
问题
是否可以直接将model转换为ctx?最终需求是执行模板引擎渲染:
String htmlTemplate = myTemplateEngine.process("html/foo.html", ctx);
解决方案
可以直接转换,以下是两种实用方式:
通用遍历转换
借助SpringModel接口的asMap()方法获取所有属性键值对,批量写入Context,适配所有Model实现类:Context ctx = new Context(); model.asMap().forEach(ctx::setVariable);过滤无关属性(可选)
如果Model中包含Spring内部的系统属性(比如绑定校验结果BindingResult),可以过滤后再写入,避免模板上下文被污染:Context ctx = new Context(); model.asMap().entrySet().stream() .filter(entry -> !entry.getKey().startsWith("org.springframework")) .forEach(entry -> ctx.setVariable(entry.getKey(), entry.getValue()));
内容的提问来源于stack exchange,提问作者anjanesh
相关产品推荐
相关产品推荐

