Java开发学习(二十四)—-SpringMVC设置请求映射路径

一、环境准备

  • 创建一个Web的Maven项目

  • pom.xml添加Spring依赖

    
      4.0.0
    ​
      com.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'}";
        }
    }

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

Java开发学习(二十四)—-SpringMVC设置请求映射路径插图

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

Java开发学习(二十四)—-SpringMVC设置请求映射路径插图1

从错误信息可以看出:

  • 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'}";
    }
}

小结

Java开发学习(二十四)—-SpringMVC设置请求映射路径插图2

注意:

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

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

 

文章来源于互联网:Java开发学习(二十四)----SpringMVC设置请求映射路径

THE END
分享
二维码