如何用 thymeleaf 序列化 POJO?

How to serialize POJO with thymeleaf?

我想使用 thymeleaf 在 <script> 标签中正常 Json 插入一个 POJO(普通旧 java 对象)。我也在使用 Spring MVC 作为框架。

给定这样一个对象:

class Data {
   String a;
   int b;
   Object c;
}

我想获得类似这样的渲染模板:

<script>
   var data = {
      a: "foo",
      b: 123,
      c: {...}
    }
</script>

直到我还没有找到使用 thymeleaf 渲染它的方法。

我试过:

<script th:inline="javascript">
    var data = /*[[${myDataObj}]]*/ {};
</script>

但这失败了,因为显然 thymeleaf 无法序列化 POJO。

然后,我还尝试提供已序列化为 json:

的对象
<script th:inline="javascript">
    var data = /*[[${myDataAsJson}]]*/ {};
</script>

但这也不起作用,因为它会再次转义字符串。同样,thymeleaf 似乎无法提供行未转义字符串。

...现在这很糟糕...如何使用 thymeleaf 在脚本标签中插入对象?!

显然,这是自 2012 年以来他们似乎并没有给予太多考虑的问题:

...我的问题是:是否有任何解决方法?要使用 thymeleaf 序列化 POJO?这有点糟糕。如果我没有那么依赖它,我会把它扔掉,但现在要改变这种依赖需要做很多工作。

编辑:

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

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


好的,我还没有真正找到好的方法,但这是我的 "better than nothing" 解决方法:

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

它并不理想,因为它无用地执行了额外的 JSON serialization/deserialization ...但至少它有效。