如何用thyme来序列化POJO?


问题内容

我想<script>使用thymeleaf 在标签内将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年以来的一个问题,他们似乎并未给予太多考虑:

…我的问题是:对此有任何解决方法吗?要使用百里香序列化POJO?有点烂。如果我不太依赖它,我会把它扔掉,但是现在它代表着很多工作来改变这种依赖关系。


问题答案:

编辑:

从thymeleaf 3开始,它已经实现:https
:
//github.com/thymeleaf/thymeleaf/issues/12

…只花了他们3年多的时间:/


好的,我还没有真正找到一种好的方法,但是这是我的“胜过一切”的解决方法:

<script th:inline="javascript">
    var jsonString = /*[[${myJsonString}]]*/ "{\"a\":\"... ";
    var data = JSON.parse(jsonString)
</script>

这不是理想的,因为它无用地执行了额外的JSON序列化/反序列化……但至少可以正常工作。