如何用 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 ...但至少它有效。
我想使用 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 ...但至少它有效。