【发布时间】:2021-12-08 09:30:21
【问题描述】:
我正在尝试使用 thymeleaf 将 JSON 对象发送到 javascript 中的属性,但是当收到值时,所有引号都转换为 "。
在我的 POJO 中,我有以下方法:
public class MyObject {
public String toJSON() throws IOException {
StringWriter result = new StringWriter();
if (this.getCaseRegistrations().size() > 0) {
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(result, this.caseRegistrations);
}
return result.toString();
}
在其他地方,该类已创建并准备好使用并发送到 Spring 控制器中的 ModelAndView:
mav.addObject("myObject", myObject);
在我的 html 页面中,我有以下内容:
<script type="text/javascript">
$(document).ready(function() {
let registrations = [[ ${myObject.toJSON()} ]]
console.log(registrations);
});
不幸的是,当它运行时,javascript 在分配上失败并抱怨&。查看源代码,我看到以下内容:
let registrations = [{&quot;prop1&quot;:&quot;val1&quot;, ...}];
当我在 java 端(在调试模式下)查看字符串时,值看起来是正确的
[{ "prop1": "val1", ...}]
我尝试了各种方法,例如let registrations = '[[ ${myObject.toJSON()} ]]'(在此处使用反引号)并让registrations = decudeURI[[ ${myObject.toJSON()} ]]) 和[# th:utext="${myObject.toJSON()}"/];。最后一次尝试(使用 th:utext)完全失败了。
将 POJO 转换为 JSON 并将其分配给 html 页面上 javascript 中的变量的正确方法是什么? (Java-Spring-Thymeleaf)
【问题讨论】:
-
你为什么使用自定义方法而不仅仅是
let registrations = [[ ${myObject} ]](在你的脚本标签上有th:inline="javascript")? Thymeleaf 将自动序列化为 json,无需任何辅助方法。看到这个:thymeleaf.org/doc/tutorials/3.0/… -
当我这样做时,我得到了对象的内存位置,而不是实际数据。我想我本来可以更清楚的。
MyObject类具有其他自定义类的对象作为属性。因此,使用 [[]] 的输出是 Prop1@32BA5CD、Prop2@88CA65B 等。 -
您确定并像文档一样将
th:inline="javascript"添加到您的脚本标签中吗? -
我认为这可能是我的解决方案。
th:inline="javascript"、type="text/javascript和language="javascript"之间存在差异。
标签: javascript java json jackson thymeleaf