Начиная с 2.3.25, делайте это так:
<#list user as propName, propValue>
${propName} = ${propValue}
</#list>
Обратите внимание, что это также работает с нестроковыми ключами (в отличие от того map[key]
, что нужно было записать как map?api.get(key)
тогда).
До 2.3.25 стандартным решением было:
<#list user?keys as prop>
${prop} = ${user[prop]}
</#list>
Однако некоторые действительно старые интеграции FreeMarker используют странную конфигурацию, в которой общедоступные Map
методы (например, getClass
) отображаются как ключи. Это происходит, когда они используют чистый BeansWrapper
(вместо DefaultObjectWrapper
), simpleMapWrapper
свойство которого было оставлено false
. Вам следует избегать такой настройки, поскольку она смешивает методы с реальными Map
записями. Но если вы столкнетесь с такой неудачной настройкой, способ избежать ситуации - использовать открытые методы Java, такие как user.entrySet()
, user.get(key)
и т.д., а не использовать конструкции языка шаблонов, такие как ?keys
или user[key]
.