如何在Spring模板引擎上下文中添加转换器?

时间:2018-08-18 20:09:32

标签: spring-boot kotlin thymeleaf spring-websocket

我想手动处理百里香片段并将生成的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>

我得到这样的错误:百里香无法找到从TestPayloadString的转换器。

当我让spring处理视图时,解决序列化/转换工作。

一种可能的解决方案是将一个序列化变量添加到上下文中,但是随后我不得不手动跟踪该变量,因此我真的不想这样做。

是否可以将转换器添加到上下文(或某个位置,以便百里香叶可以访问/查找它)?

0 个答案:

没有答案