如何在Spring中动态创建addViewController实现URL与模板映射?
自动实现URL到模板文件的映射配置
你可以通过扫描模板目录下的HTML文件,批量自动注册视图控制器,替代手动逐个添加的重复代码,具体实现如下:
核心实现代码
在你的WebMvcConfigurer实现类中,注入ResourcePatternResolver,然后在addViewControllers方法中完成自动扫描与注册:
import org.springframework.context.annotation.Configuration; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourcePatternResolver; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import javax.annotation.Resource; import java.io.IOException; @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Resource private ResourcePatternResolver resourcePatternResolver; @Override public void addViewControllers(ViewControllerRegistry registry) { try { // 扫描admin目录下所有子目录中的HTML文件(根据你的模板路径调整) Resource[] resources = resourcePatternResolver.getResources("classpath:/templates/admin/**/*.html"); for (Resource resource : resources) { // 获取文件相对模板目录的路径,例如:admin/test/test.html String relativePath = resource.getURL().getPath().split("templates/")[1]; // 生成URL映射:去掉admin/前缀和.html后缀,例如:/test String url = "/" + relativePath.substring("admin/".length(), relativePath.lastIndexOf(".")); // 生成视图名称:去掉.html后缀,例如:admin/test/test String viewName = relativePath.substring(0, relativePath.lastIndexOf(".")); // 批量注册视图控制器 registry.addViewController(url).setViewName(viewName); } } catch (IOException e) { e.printStackTrace(); } } }
关键说明
- 扫描路径
classpath:/templates/admin/**/*.html:匹配templates/admin下所有子目录的HTML文件,可根据你的实际模板位置调整。 - 路径拆分逻辑:完全匹配你手动配置的规则——URL对应
admin/后的子路径,视图名称对应完整模板路径,和你手动写的registry.addViewController("/test").setViewName("admin/test/test")效果一致。 - 异常处理:捕获IO异常避免扫描失败导致启动报错,可根据需求调整异常处理逻辑。
内容的提问来源于stack exchange,提问作者user19901531
相关产品推荐
相关产品推荐

