我在我的Sping Boot 应用程序中有一个极简主义的Thymeleaf配置,它只是用来将HTML渲染成PDF文件。
我正在升级到春 Boot 3,需要将thymeleaf从3.0升级到3.1
这是我在升级到Sping Boot 3之前的旧代码,主要区别是WebContext
的构造。在thymeleaf 3.0中,我是基于servlet请求/响应构建它的,而在thymeleaf 3.1中,我们是从WebExchange对象构建它的
Thymeleaf 3.0的控制器
override fun previewDataController(
request: HttpServletRequest,
response: HttpServletResponse,
objId: UUID,
): ResponseEntity<ByteArray> {
val context = WebContext(request, response, request.servletContext)
val pdfData = someService.previewData(context, objId)
...
}
升级到百里香3.1
override fun previewDataController(
webExchange: IWebExchange,
objId: UUID,
): ResponseEntity<ByteArray> {
val context = WebContext(webExchange, webExchange.locale)
val pdfData = someService.previewData(context, objId)
...
}
下面是失败的代码
@Autowired
val templateEngine: TemplateEngine
...
fun someMethod(context: WebContext) {
val htmlString = templateEngine.process("resources/template", context)
...
}
在上下文中有对象object
,并且在调试中可以看到此属性不为空
以下是模板:
<body>
<p>Name <span th:text="${object.name}">#</span></p>
</body>
但是我的单元测试失败了,声明模板中的object
为null。
Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'name' cannot be found on null
问题:
1.这是构建IWebExchange对象的正确方法吗?它会被Spring绑定吗?
1.我是否遗漏了新3.1版本的任何配置?
1.会不会是测试上下文配置的问题?
谢谢!
1条答案
按热度按时间q5lcpyga1#
Thymeleaf的情况发生了很大的变化,主要是因为它提供了
JavaEE
和JakartaEE
支持,所以需要抽象一些东西,现在简单地创建一个WebExchange
就更复杂了。你应该能够做什么(你可能可以转换的Java代码)。
您应该能够调用该函数(并将其转换为Kotlin)以创建所需的
WebContext
。