我想使用thymeleaf在<script>
标签中插入一个POJO(普通旧java对象)作为普通Json。我也使用Spring MVC作为框架。
给出这样一个对象:
class Data {
String a;
int b;
Object c;
}
我希望获得这样的渲染模板:
<script>
var data = {
a: "foo",
b: 123,
c: {...}
}
</script>
直到,我还没有找到使用百里香的方法来实现这一目标。
我试过了:
<script th:inline="javascript">
var data = /*[[${myDataObj}]]*/ {};
</script>
但这失败了,因为显然百里香无法将POJO序列化。
然后,我也尝试提供已经序列化为json的对象:
<script th:inline="javascript">
var data = /*[[${myDataAsJson}]]*/ {};
</script>
但这不起作用,因为它会再次转义字符串。再一次,百里香叶似乎没有办法提供行未转义的字符串。
...现在这很糟糕......如何使用百里香叶在脚本标签中插入一个对象?!
显然,这是自2012年以来的一个问题,他们似乎没有给予太多考虑:
...我的问题是:这有什么解决方法吗?使用thymeleaf序列化POJO?它有点糟糕。如果我没有那么多依赖它,我就把它扔掉,但现在它代表了很多工作来改变这种依赖。
答案 0 :(得分:3)
编辑:
截至百里香3号,已实施: https://github.com/thymeleaf/thymeleaf/issues/12
......它只花了3年多时间:/
好吧,我还没有真正找到一个好方法,但这里是我的#34;总比没有好&#34;解决方法:
<script th:inline="javascript">
var jsonString = /*[[${myJsonString}]]*/ "{\"a\":\"... ";
var data = JSON.parse(jsonString)
</script>
它不理想,因为它无用地执行额外的JSON序列化/反序列化......但至少它可以工作。