春季将POJO的公共领域公开给FTL

时间:2018-09-12 19:18:48

标签: spring spring-boot freemarker

我不知道如何在Spring Boot中将POJO发送到模板。

这是我的POJO和我的控制器:

class DebugTest {
    public String field = "Wooowee";
    public String toString() {
        return "testie " + field;
    }
}

@Controller
@RequestMapping("/debug")
public class WebDebugController {

    @RequestMapping(value = "/ftl", method = RequestMethod.GET)
    public ModelAndView ftlTestPage(Model model) {
        DebugTest test = new DebugTest();
        ModelAndView mnv = new ModelAndView("debug");
        mnv.addObject("test", test);
        return mnv;
    }

}

这是我的模板:

HERES THE TEST: ${test}$
HERES THE TEST FIELD: ${test.field}$

这是输出(GET / debug / ftl):

HERES THE TEST: testie Wooowee$
HERES THE TEST FIELD: FreeMarker template error (DEBUG mode; use RETHROW in production!):
The following has evaluated to null or missing:
==> test.field  [in template "debug.ftl" at line 3, column 25]

[Java stack trace]

1 个答案:

答案 0 :(得分:0)

根据JavaBeans规范,类本身(DebugTest)也必须是公共的。另外,默认情况下不会显示字段。通常最好定义getter方法(也许使用Lombok),但是如果要使用字段,请像这样配置ObjectWrapper。在您使用Spring Boot时,我认为您的application.properites中将是这样的:

spring.freemarker.settings.objectWrapper=DefaultObjectWrapper(2.3.28, exposeFields = true)