如何在 freemarker 中使用没有 get 和 set 的 bean?

How to use bean without get and set in freemaker?

我有一个class这样的。

 public class User {
   public String username;
   public String age;
}

当我使用freemarker时

${user.username!}

我什么都没得到。

但是如果我像这样更改 class

   public class User {
        public String username;
        public String age;

        public String getUsername() {
           return username;
        }
   }

我可以得到价值。

如何在freemaker中使用没有get和set的bean?

因为我有太多class没有get和set了

我尝试了 lombok,但这不是我想要的。

类 没有 getter 和 setter 不是标准的 Java bean。请参阅 the Wikipedia article on Java beans,其中指出按照惯例,属性必须可以使用 getsetis 方法。

因此,您应该习惯在 bean 中提供这些方法 类。

默认情况下,freemarker 仅公开 JavaBean 属性和 public 方法。

但您可以配置 ObjectWrapper 以公开所有公开 public,非静态字段:

Configuration cfg = new Configuration(Configuration.VERSION_2_3_27);
DefaultObjectWrapperBuilder wrapperBuilder = new DefaultObjectWrapperBuilder(Configuration.VERSION_2_3_27);
wrapperBuilder.setExposeFields(true);
cfg.setObjectWrapper(wrapperBuilder.build());