• Java开发学习----SpringMVC设置请求映射路径


    一、环境准备

    • 创建一个Web的Maven项

    • pom.xml添加Spring依赖

      
        4.0.0com.itheima
        springmvc_03_request_mapping
        1.0-SNAPSHOT
        war
          
            javax.servlet
            javax.servlet-api
            3.1.0
            provided
          
          
            org.springframework
            spring-webmvc
            5.2.10.RELEASE
          
        
          
            
              org.apache.tomcat.maven
              tomcat7-maven-plugin
              2.1
              
                80
                /
              
            
          
        
      
    • 创建对应的配置类

      public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
      ​
          protected Class[] getServletConfigClasses() {
              return new Class[]{SpringMvcConfig.class};
          }
          protected String[] getServletMappings() {
              return new String[]{"/"};
          }
          protected Class[] getRootConfigClasses() {
              return new Class[0];
          }
      }
      ​
      @Configuration
      @ComponentScan("com.itheima.controller")
      public class SpringMvcConfig {
      }
      ​
    • 编写BookController和UserController

      @Controller
      public class UserController {
      ​
          @RequestMapping("/save")
          @ResponseBody
          public String save(){
              System.out.println("user save ...");
              return "{'module':'user save'}";
          }
          
          @RequestMapping("/delete")
          @ResponseBody
          public String save(){
              System.out.println("user delete ...");
              return "{'module':'user delete'}";
          }
      }
      ​
      @Controller
      public class BookController {
      ​
          @RequestMapping("/save")
          @ResponseBody
          public String save(){
              System.out.println("book save ...");
              return "{'module':'book save'}";
          }
      }

    最终创建好的项目结构如下:

    把环境准备好后,启动Tomcat服务器,后台会报错:

    从错误信息可以看出:

    • UserController有一个save方法,访问路径为 http://localhost/save

    • BookController也有一个save方法,访问路径为 http://localhost/save

    • 当访问 http://localhost/save 的时候,到底是访问UserController还是BookController?

    二、问题分析

    团队多人开发,每人设置不同的请求路径,冲突问题该如何解决? 解决思路:为不同模块设置模块名作为请求路径前置

    对于Book模块的save,将其访问路径设置 http://localhost/book/save

    对于User模块的save,将其访问路径设置 http://localhost/user/save

    这样在同一个模块中出现命名冲突的情况就比较少了。

    三、设置映射路径

    步骤1:修改Controller

    @Controller
    public class UserController {
    ​
        @RequestMapping("/user/save")
        @ResponseBody
        public String save(){
            System.out.println("user save ...");
            return "{'module':'user save'}";
        }
        
        @RequestMapping("/user/delete")
        @ResponseBody
        public String save(){
            System.out.println("user delete ...");
            return "{'module':'user delete'}";
        }
    }
    ​
    @Controller
    public class BookController {
    ​
        @RequestMapping("/book/save")
        @ResponseBody
        public String save(){
            System.out.println("book save ...");
            return "{'module':'book save'}";
        }
    }

    问题是解决了,但是每个方法前面都需要进行修改,写起来比较麻烦而且还有很多重复代码,如果/user后期发生变化,所有的方法都需要改,耦合度太高。

    步骤2:优化路径配置

    优化方案:

    @Controller
    @RequestMapping("/user")
    public class UserController {
    ​
        @RequestMapping("/save")
        @ResponseBody
        public String save(){
            System.out.println("user save ...");
            return "{'module':'user save'}";
        }
        
        @RequestMapping("/delete")
        @ResponseBody
        public String save(){
            System.out.println("user delete ...");
            return "{'module':'user delete'}";
        }
    }
    ​
    @Controller
    @RequestMapping("/book")
    public class BookController {
    ​
        @RequestMapping("/save")
        @ResponseBody
        public String save(){
            System.out.println("book save ...");
            return "{'module':'book save'}";
        }
    }

    小结

    注意:

    • 当类上和方法上都添加了 @RequestMapping 注解,前端发送请求的时候,要和两个注解的value值相加匹配才能访问到。

    • @RequestMapping注解value属性前面加不加 / 都可以

  • 相关阅读:
    Conformer测试问题
    2024最新-ubuntu22.04安装最新版QT6.6~6.8教程
    Android--ConnectivityManager使用
    在Fedora 16 linux下安装USB无线网卡驱动rtl88x2bu
    安全队列和曲线拟合
    MATLAB中ss2tf函数用法
    【机器学习9】前馈神经网络
    大数据-之LibrA数据库系统告警处理(ALM-12039 GaussDB主备数据不同步)
    Acwing_98
    阿里巴巴面试题- - -Java体系最新面试题(5)
  • 原文地址:https://blog.csdn.net/lt_xiaodou/article/details/126297337