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

一、环境准备

  • 创建一个Web的Maven项目
  • pom.xml添加Spring依赖
  • <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0modelVersion> ​ <groupId>com.itheimagroupId> <artifactId>springmvc_03_request_mappingartifactId> <version>1.0-SNAPSHOTversion> <packaging>warpackaging> ​ <dependencies> <dependency> <groupId>javax.servletgroupId> <artifactId>javax.servlet-apiartifactId> <version>3.1.0version> <scope>providedscope> dependency> <dependency> <groupId>org.springframeworkgroupId> <artifactId>spring-webmvcartifactId> <version>5.2.10.RELEASEversion> dependency> dependencies> ​ <build> <plugins> <plugin> <groupId>org.apache.tomcat.mavengroupId> <artifactId>tomcat7-maven-pluginartifactId> <version>2.1version> <configuration> <port>80port> <path>/path> configuration> plugin> plugins> build> project> ​
  • 创建对应的配置类
  • 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

@Controllerpublic 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'}";    }}​@Controllerpublic 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属性前面加不加 / 都可以
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章