You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring MVC无法正常运行:路由404与视图解析500报错求助

嘿,刚接触Spring MVC和Thymeleaf遇到这种问题太正常了,我来帮你捋捋清楚!

先搞懂核心问题:@EnableWebMVC为啥会把404变成500?

Spring Boot默认已经帮我们配置好了Web MVC的整套规则——包括静态资源访问路径、Thymeleaf视图解析器这些。而手动添加@EnableWebMVC会直接覆盖这些默认配置,相当于把Spring Boot帮你搭好的架子拆了,这就是你加注解后出现500(找不到index视图)的核心原因。

下面分两种场景给你解决方法:


场景1:移除@EnableWebMVC,用Spring Boot默认配置解决404

这是新手最推荐的方式,先回到初始状态排查问题:

  • 检查主启动类:确保它标注了@SpringBootApplication(这个注解已经包含了组件扫描,能自动找到你的控制器)
  • 检查控制器注解:别把@Controller写成@RestController!前者是用来返回视图页面的,后者会直接把返回值当成JSON/字符串返回,根本不会走视图解析器,这是新手最容易踩的坑。正确的控制器写法应该是这样:
    @Controller
    public class HomeController {
        @GetMapping("/")
        public String home() {
            // 返回视图名"index",Thymeleaf会自动去templates下找index.html
            return "index";
        }
    }
    
  • 静态资源直接访问测试:/src/main/resources/static下的文件可以直接通过URL访问,比如你直接输入http://localhost:8080/index.html,如果还404,那可能是IDE没正确编译资源,试试清理项目后重新构建。

场景2:如果一定要用@EnableWebMVC,手动配置视图解析器

如果你因为某些特殊需求必须加@EnableWebMVC,那得手动把Spring Boot默认帮你配置的内容补回来:
创建一个Web配置类,手动配置Thymeleaf视图解析器和静态资源路径:

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    @Autowired
    private ApplicationContext applicationContext;

    // 配置Thymeleaf模板解析器,指定模板文件位置和后缀
    @Bean
    public SpringResourceTemplateResolver templateResolver() {
        SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
        templateResolver.setApplicationContext(applicationContext);
        templateResolver.setPrefix("classpath:/templates/");
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode(TemplateMode.HTML);
        templateResolver.setCharacterEncoding("UTF-8");
        return templateResolver;
    }

    @Bean
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver());
        templateEngine.setEnableSpringELCompiler(true);
        return templateEngine;
    }

    // 注册Thymeleaf视图解析器
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        ThymeleafViewResolver resolver = new ThymeleafViewResolver();
        resolver.setTemplateEngine(templateEngine());
        resolver.setCharacterEncoding("UTF-8");
        registry.viewResolver(resolver);
    }

    // 配置静态资源访问路径,不然static下的文件也访问不到
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**")
                .addResourceLocations("classpath:/static/");
    }
}

最后确认依赖是否正确

检查你的pom.xml(Maven)或build.gradle(Gradle)里有没有Thymeleaf的starter依赖:

  • Maven:
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    
  • Gradle:
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    

如果没加这个依赖,Spring Boot根本不会自动配置Thymeleaf视图解析器,就算你把文件放在templates下也找不到。

内容的提问来源于stack exchange,提问作者Vicente Rivera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:48:45