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

Spring Boot Controller未被检测及循环视图路径问题求助

解决Spring Boot + Thymeleaf循环视图路径及控制器注解无引用问题

访问http://localhost:8080/home时出现错误:

Circular view path [home]: would dispatch back to the current handler URL [/home] again

同时IDE提示@Controller和@GetMapping("/home")无引用。

问题根源

你存在两个组件同时映射了/home路径:

  • WebController类通过@GetMapping("/home")处理该路径
  • MvcConfig类通过addViewController("/home").setViewName("home")注册了该路径的视图控制器

重复映射会导致Spring处理请求时陷入循环:请求/home时处理器返回视图名home,视图解析后又触发/home请求,形成闭环。另外IDE的无引用提示,大概率是重复映射导致WebController的映射被覆盖,或Spring未正确加载该控制器。

解决方案

步骤1:移除重复的路径映射

选择以下任一方式即可:

方式一:保留WebController,删除MvcConfig中的/home映射

修改MvcConfig类,移除/home的视图控制器注册:

package com.example.securingweb;

import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

public class MvcConfig implements WebMvcConfigurer {
    // 注释或删除该行
    // registry.addViewController("/home").setViewName("home");
}

同时确保MvcConfig被Spring扫描:若它不在com.example.test包或子包下,需给MvcConfig添加@Configuration注解,或在Application类中通过@ComponentScan(basePackages = {"com.example.test", "com.example.securingweb"})显式扫描该包。

方式二:保留MvcConfig的视图控制器,删除WebController中的/home映射

删除WebController类,或注释掉其中的/home映射方法:

package com.example.test;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class WebController {
    // 注释或删除该方法
    // @GetMapping("/home")
    // public String home(){
    //     return "home";
    // }
}

给MvcConfig添加@Configuration注解,确保Spring能识别该配置类:

package com.example.securingweb;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MvcConfig implements WebMvcConfigurer {
    public void addViewControllers(ViewControllerRegistry registry){
        registry.addViewController("/home").setViewName("home");
    }
}

步骤2:确保Spring扫描到所有组件

检查Application类的注解配置:

  • 默认@SpringBootApplication会扫描自身所在包(com.example.test)及其子包,你的WebController在该包下,理论上会被扫描到。
  • 若MvcConfig在com.example.securingweb包下,需添加@ComponentScan包含该包:
package com.example.test;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan(basePackages = {"com.example.test", "com.example.securingweb"})
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

步骤3:验证配置并重启应用

  1. 执行mvn clean install清理构建缓存
  2. 重启Spring Boot应用
  3. 访问http://localhost:8080/home,即可正常渲染home.html页面

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 09:21:17