尝试使用 Spring Boot 2.7 将 Spring thymeleaf 从 3.0 单独更新到 3.2。添加了以下依赖项。
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.1.2.RELEASE</version>
出现异常
org.springframework.web.util.NestedServletException: Request processing failed; nested
exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate
[org.thymeleaf.spring5.view.ThymeleafView]: Unresolvable class definition; nested exception
is java.lang.NoClassDefFoundError: org/thymeleaf/web/IWebExchange
at
com.framework.exception.ErrorAttributesTests.defaultHtmlValue(ErrorAttributesTests.java:62)
测试用例:
测试
@BeforeMethod
public void setup() {
mockMvc = MockMvcBuilders.standaloneSetup(new BasicErrorController(new ErrorAttributes(new ObjectMapper()), new ErrorProperties())).setViewResolvers(viewResolver()).build();
//this.mockMvc = webAppContextSetup(this.wac).build();
}
public void defaultHtmlValue() throws Exception {
this.mockMvc.perform(get("/error").accept(MediaType.TEXT_HTML_VALUE)
.requestAttr(RequestDispatcher.ERROR_EXCEPTION_TYPE, "bar")
.requestAttr(RequestDispatcher.ERROR_STATUS_CODE, 400)
.requestAttr(RequestDispatcher.ERROR_REQUEST_URI, "/notes"))
.andDo(print()).andExpect(status().isBadRequest())
.andExpect(content().contentType("text/html;charset=UTF-8"))
.andExpect(content().string(Matchers.containsString("Something went wrong!")));
}
private ViewResolver viewResolver() {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setPrefix("templates/");
templateResolver.setCacheable(false);
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("HTML5");
templateResolver.setCharacterEncoding("UTF-8");
templateEngine.setTemplateResolver(templateResolver);
viewResolver.setTemplateEngine(templateEngine);
viewResolver.setCharacterEncoding("UTF-8");
return viewResolver;
}
我需要将SpringBoot更新到3吗?
如果您使用 Spring Boot,请添加
spring-boot-starter-thymeleaf
。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
这将带来 thymeleaf 所需的所有依赖项。