Ab Thymeleaf 3 ist es möglich, eine Zeichenfolge auszugeben, ohne in JavaScript (oder vielmehr inline-Verarbeitung) zu maskieren. Sie können "[(...)]" anstelle von "[...]]" verwenden.
HTML
<script th:inline="javascript">/*<![CDATA[*/
var foo = /*[(${foo})]*/ {"bar":"drei","baz":"]]\u003e"\n'<\u002fscript\u003e"};
/*]]>*/</script>
Controller (Spring)
@GetMapping("/")
public Object index(Model model) throws IOException {
final MyForm myForm = new MyForm("", "'\"&</script>]]>", Optional.of(LocalDateTime.now()));
model.addAttribute("foo", this.objectMapper.writeValueAsString(myForm));
return "index";
}
[^ 1]: In diesem Beispiel wird ObjectMapper so angepasst, dass /
und >
maskiert werden. Dies dient dazu, das Tag << / script> und
]]> `zu vermeiden.
<script>/*<![CDATA[*/
var contextPath = "\/";
var foo = {"baz":"","cux":"'\"&<\u002Fscript\u003E]]\u003E","datetime":"2017-10-16T23:26"};
/*]]>*/</script>
Wenn Sie das Objekt unverändert an Thymeleaf übergeben und serialisieren, wird LocalDate usw. (bezogen auf JSR-310) konvertiert, Optional wird jedoch anscheinend nicht unterstützt.
Im Fall der Spring Boot 1.5-Serie ist das Referenzziel von Spring-Boot-Starter-Thymeleaf Thymeleaf 2, daher muss die Abhängigkeit separat angegeben werden.
def thymeleafVersion = '3.0.7.RELEASE'
// https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf-spring4
compile group: 'org.thymeleaf', name: 'thymeleaf-spring4', version: thymeleafVersion
// https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf
compile group: 'org.thymeleaf', name: 'thymeleaf', version: thymeleafVersion
Danach funktioniert AutoConfiguration und erledigt dies für Sie.
Recommended Posts