当我在 webflux 应用程序中使用 freemarker 时,我总是遇到一个异常:无法解析名称为“”的 View ;
我的 FreemarkerConfig:
@Bean
public FreeMarkerConfigurer freeMarkerConfigurer() {
FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
configurer.setTemplateLoaderPaths("classpath:/src/main/resources/templates");
return configurer;
}
View 解析器:
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.freeMarker().suffix(".ftl");
}
类路径: my classpatg
堆栈跟踪: stacktrace
主路由器:
@Configuration
public class MainRouter {
@Bean
public RouterFunction<ServerResponse> route(MainHandler mainHandler){
RequestPredicate get = RequestPredicates.GET("/news");
return RouterFunctions.route(get, mainHandler::news);
}
}
主处理程序:
@Component
public class MainHandler {
private Logger logger = LoggerFactory.getLogger(MainHandler.class);
@Autowired
private UserService userService;
public Mono<ServerResponse> news(ServerRequest serverRequest) {
Mono<? extends Principal> principal = serverRequest.principal();
return principal.flatMap(p -> {
logger.info(p.getName());
return userService.findByUserName(p.getName()).flatMap(user -> {
return ServerResponse.ok().render("news", Map.of("currentUser", user, "messages", userService.findMessages(user)))
.onErrorResume(error->{
logger.info(error.getLocalizedMessage());
return ServerResponse.badRequest().build();
});
});
});
}
}
最佳答案
我想应该是 "classpath:/templates"
当您构建项目时,/src/main/resources/
部分就消失了,就像输出jar
将在存档根目录下直接包含 templates
目录。
关于java - Freemarker 和 webflux 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61354042/