Spring无xml配置:找不到URI为的HTTP请求的映射



我们有一个带有控制器的Spring MVC应用程序:

@Controller("/app")

@Controller("/app/page1")

@Controller("/app/page2")

我们有AppInitializer:

public class AppInitializer implements WebApplicationInitializer {
  @Override
  public void onStartup(ServletContext servletContext) throws ServletException {
    WebApplicationContext context = getContext();
    DispatcherServlet servlet = new DispatcherServlet(context);
    ServletRegistration.Dynamic dispatcher = servletContext.addServlet("DispatcherServlet1", servlet);
    dispatcher.setLoadOnStartup(1);
    dispatcher.addMapping("/app/*");
  }
  private AnnotationConfigWebApplicationContext getContext() {
    ... prepare app context
  }
}

运行此应用程序时,我们可以访问

http://localhost:8080/app

但是

http://localhost:8080/app/page1导致错误

警告:在中找不到URI为[/app/page1]的HTTP请求的映射名为"DispatcherServlet 1"的DispatcherServlet

http://localhost:8080/app/page2导致错误

警告:在中找不到URI为[/app/page2]的HTTP请求的映射名为"DispatcherServlet 1"的DispatcherServlet

我们可以通过向像这样的DispatcherServlet添加严格的映射来解决这个问题

DispatcherServlet servlet = new DispatcherServlet(context);
ServletRegistration.Dynamic dispatcher = servletContext.addServlet("DispatcherServlet1", servlet);
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/app", "/app/page1", "/app/page2");

所有页面工作正常:

http://localhost:8080/app

http://localhost:8080/app/page1

http://localhost:8080/app/page2

但问题是,每次添加新页面时,我们都需要向DispatcherServlet添加映射。例如,要添加第3页,我们需要创建控制器

@Controller("/app/page3")

添加调度器servlet映射dispatcher.addMapping("/app", "/app/page1", "/app/page2", **"/app/page3"**);

我们真的希望避免这最后一步。

dispatcher.addMapping("/app/*");将是理想的,但正如我上面提到的,它不起作用。

知道我们错过了什么吗?

您可以这样做映射:

@Controller
@RequestMapping("/app/products")
public class ProductController implements Serializable {...}

相关内容

  • 没有找到相关文章

最新更新