Вы не должны передавать JSON строк от вашего контроллера к вашей модели. Вместо этого вы должны передавать обычные объекты Java и позволять Thymeleaf выполнять кодирование за вас. Например, если вам нужен набор данных, который выглядит следующим образом:
[ ["Name1"], ["Name2"] ]
Затем вы должны добавить его в свою модель следующим образом:
// This is an array of arrays, just like [ ["Name1"], ["Name2"] ]
String[][] dataset = {{"Name1"}, {"Name2"}};
model.addAttribute("dataString", dataset);
Затем результат
<script th:inline="javascript">
/*<![CDATA[*/
var dataSet = [[${dataString}]];
/*]]>*/
</script>
Результатом будет JavaScript:
var dataSet = [ ["Name1"], ["Name2"] ];
Как вы и хотели, без необходимости вручную создавать строку. Это, конечно, работает со всеми видами Java объектов и даже автоматически конвертирует геттеры и сеттеры в обычные JavaScript объекты.
Конечно, если вы действительно просто хотите добавить JSON строки прямо из вашей модели, вы, конечно, можете использовать неэкранированный inline.
var dataSet = [(${dataString})];
Но это действительно противоречит тому, как этот материал должен работать.