Desde 2.3.25, hazlo así:
<#list user as propName, propValue>
${propName} = ${propValue}
</#list>
Tenga en cuenta que esto también funciona con claves que no son cadenas (a diferencia de map[key], que tenía que escribirse como map?api.get(key)entonces).
Antes de 2.3.25, la solución estándar era:
<#list user?keys as prop>
${prop} = ${user[prop]}
</#list>
Sin embargo, algunas integraciones de FreeMarker realmente antiguas usan una configuración extraña, donde los Mapmétodos públicos (como getClass) aparecen como claves. Eso sucede porque están usando un puro BeansWrapper(en lugar de DefaultObjectWrapper) cuya simpleMapWrapperpropiedad se dejó false. Debe evitar esta configuración, ya que mezcla los métodos con Mapentradas reales . Pero si llegas a tener tal configuración desafortunado, la manera de escapar de la situación está usando los métodos de Java expuestas, tales como user.entrySet(), user.get(key), etc., y no usar las construcciones del lenguaje como plantilla ?keyso user[key].