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
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
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.