我想手动处理百里香片段并将生成的HTML代码返回给客户端。该片段包含已传递变量的序列化。
我有以下代码:
@Component
class AnyToString : Converter<Any, String> {
override fun convert(source: Any) = String(source.serialize())
}
data class TestPayload(var x1: String = "x1", var x2: String = "x2")
@Controller
class TestWebsocketController(private val templateEngine: SpringTemplateEngine) {
@MessageMapping("/test")
@SendToUser("/queue/state")
fun test(testPayload: TestPayload): String {
// How can I add a converter here?
val context = Context()
context.setVariable("testPayload", testPayload)
return templateEngine.process("test", mutableSetOf("content"), context)
}
}
片段代码:
<th:block th:fragment="content">
<!-- This works since no converter is needed -->
<div hidden id="testPayloadX1" th:value="${testPayload.x1}"></div>
<!-- This does not, fails with no converter found -->
<div hidden id="testPayload" th:value="${{testPayload}}"></div>
</th:block>
我得到这样的错误:百里香无法找到从TestPayload
到String
的转换器。
当我让spring处理视图时,解决序列化/转换工作。
一种可能的解决方案是将一个序列化变量添加到上下文中,但是随后我不得不手动跟踪该变量,因此我真的不想这样做。
是否可以将转换器添加到上下文(或某个位置,以便百里香叶可以访问/查找它)?