Including literal JSON content in Velocity (avoiding HTML escapes)

1.5k Views Asked by At

I'm trying to use the Velocity engine embedded in Atlassian's products (and exposed through com.atlassian.templaterenderer) to substitute a JSON value into a template.

In the template, this looks a bit like the following:

<script>
  foo = $foo
</script>

However, when I render the template with "foo" mapped to a string ["bar", "baz"], the output is the following:

<script>
  foo = [&quot;bar&quot;, &quot;baz&quot;]
</script>

How can this be avoided?

2

There are 2 best solutions below

0
Charles Duffy On BEST ANSWER

Atlassian has an event handler which performs escaping on any variable with a name not ending with WithHtml.

Thus:

<script>
foo = $fooWithHtml
</script>

expands as desired.

0
serg On

This is not a default behavior, looks like you have EscapeHtmlReference event handler registered either in your velocity.properties or in java initialization. More details on event handlers here.