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

Spring+Hibernate角色认证授权时DispatcherServlet URI映射缺失问题

解决Spring DispatcherServlet找不到请求URI映射的问题

你遇到的No mapping found for HTTP request with URI [/Shoping/home]错误,核心是Spring MVC的配置出现了冲突或遗漏,导致控制器映射没有被正确注册。结合你的代码,我整理了几个关键修复点:

1. 合并WebMvc配置类,消除配置冲突

你现在有两个继承WebMvcConfigurerAdapter的配置类,还同时扫描同一个包,这种情况很容易导致配置混乱:

  • ShoppingServletConfig没加@EnableWebMvc,里面的视图解析器配置根本不会生效;
  • WebConfigStatic加了@EnableWebMvc但没包含视图解析器,两个类的配置无法协同工作。

修复方案:把两个配置类的逻辑合并成一个,统一管理WebMvc相关配置:

@Configuration
@EnableWebMvc
@EnableTransactionManagement
@ComponentScan(basePackages = "com.project.shopping")
public class ShoppingWebConfig extends WebMvcConfigurerAdapter {

    // 视图解析器配置
    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/ui/view/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }

    // 静态资源处理器配置
    @Override
    public void addResourceHandlers(final ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/js/**").addResourceLocations("/ui/js/");
        registry.addResourceHandler("/css/**").addResourceLocations("/ui/css/");
        registry.addResourceHandler("/*.html").addResourceLocations("/ui/view/");
        // 原配置里的"/*.html/**"路径写法不合理,改成"/*.html"更符合静态资源匹配逻辑
    }
}

然后修改ShoppingInitializerWeb,注册合并后的配置类,同时调整DispatcherServlet的映射规则:

public class ShoppingInitializerWeb implements WebApplicationInitializer {
    public void onStartup(ServletContext container) throws ServletException {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(ShoppingWebConfig.class);
        ctx.setServletContext(container);

        ServletRegistration.Dynamic servlet = container.addServlet("dispatcher", new DispatcherServlet(ctx));
        servlet.setLoadOnStartup(1);
        servlet.addMapping("/"); 
        // 把原来的"/*"改成"/",避免拦截容器对JSP的直接处理请求,这是Spring MVC推荐的映射方式
    }
}

2. 确认控制器被正确扫描

检查你的UserController是否在com.project.shopping包(或其子包)下,确保@ComponentScan能扫描到它。另外确认控制器注解没有写错:

@Controller
@RequestMapping("/")
public class UserController {
    @RequestMapping(value = { "/", "/home" }, method = RequestMethod.GET)
    public String homePage(ModelMap model) {
        model.addAttribute("user", getPrincipal());
        return "welcome";
    }
    // 要确保getPrincipal()方法存在且没有编译/运行错误
}

这个配置本身是正确的,会映射/Shoping/和/Shoping/home两个请求。

3. 验证配置生效情况

启动服务器后,查看控制台日志:

  • 找有没有类似Mapped "{[/ || /home],methods=[GET]}" onto public java.lang.String com.project.shopping.controller.UserController.homePage(org.springframework.ui.ModelMap)的日志,出现这条就说明控制器映射已经注册成功;
  • 确认没有配置加载相关的报错信息。

如果还是有问题,可以开启Spring MVC的DEBUG日志,查看请求处理的详细流程,进一步定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:23:02