2
<script th:inline="javascript" type="text/javascript">
    //expose list data to javascript
    var listObject = /*[[${listObject}]]*/ [];
</script>

打印到文件中的替换文本与 Jackson 库的 ObjectMapper 所做的不同。

在上面的例子中使用 Thymeleaf,listObject 将是

{
   "dataType":{
      "$type":"DataType",
      "$name":"STRING"
   },
   "friendlyName":"Customer Key"
}

如果我使用 ObjectMapper(也与 Spring @RequestBody/@ResponseBody 一起使用)打印对象,它将是

{
   "dataType":"STRING",
   "friendlyName":"Customer Key"
}

有没有办法可以强制 thymeleaf 与 ObjectMapper 兼容。

4

2 回答 2

2

我认为不得不说明百里香中的杰克逊和 JSON 内联。
总而言之,3.0 thymeleaf 里程碑考虑切换到自定义 TextInliners 的可能性。

因此,目前没有“干净”的方式来切换到 Jackson json 序列化。

但是,您可以做的是偷偷摸摸自己的 TextInliner。那是:

  1. 创建一个类org.thymeleaf.standard.inliner.StandardJavaScriptTextInliner
  2. 实现您自己的formatEvaluationResult(Object)方法版本,
    您可以在其中调用 Jackson ObjectMapper。
  3. 把这个新StandardJavaScriptTextInliner类放在合适的地方,这样就可以在原类之前加载(在tomcat中fe把它放在正确的包结构下的classes dir中)。
于 2013-10-28T22:27:27.830 回答
0

另外的选择:

当您在 thymeleaf 上下文中设置 listObject 时,将其设置为通过使用 Jackson 将 listObject 转换为 JSON 字符串而获得的字符串

然后使用 JS eval() 或更好的方法 - JSON.parse 将字符串转换为 JS 对象。

于 2015-02-20T01:36:05.633 回答