如何用百里香叶序列化POJO?

时间:2015-02-20 16:09:38

标签: spring spring-mvc thymeleaf

我想使用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?它有点糟糕。如果我没有那么多依赖它,我就把它扔掉,但现在它代表了很多工作来改变这种依赖。

1 个答案:

答案 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序列化/反序列化......但至少它可以工作。