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


    一、环境准备

     二、问题分析

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

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

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

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

    • 创建一个Web的Maven项目

    • pom.xml添加Spring依赖
       

      1. "1.0" encoding="UTF-8"?>
      2. "http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      4. 4.0.0
      5. com.itheima
      6. springmvc_03_request_mapping
      7. 1.0-SNAPSHOT
      8. war
      9. javax.servlet
      10. javax.servlet-api
      11. 3.1.0
      12. provided
      13. org.springframework
      14. spring-webmvc
      15. 5.2.10.RELEASE
      16. org.apache.tomcat.maven
      17. tomcat7-maven-plugin
      18. 2.1
      19. 80
      20. /
    • 创建对应的配置类

      1. public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
      2. protected Class[] getServletConfigClasses() {
      3. return new Class[]{SpringMvcConfig.class};
      4. }
      5. protected String[] getServletMappings() {
      6. return new String[]{"/"};
      7. }
      8. protected Class[] getRootConfigClasses() {
      9. return new Class[0];
      10. }
      11. }
      12. @Configuration
      13. @ComponentScan("com.itheima.controller")
      14. public class SpringMvcConfig {
      15. }
      编写BookController和UserController
      
      
      1. @Controller
      2. public class UserController {
      3. @RequestMapping("/save")
      4. @ResponseBody
      5. public String save(){
      6. System.out.println("user save ...");
      7. return "{'module':'user save'}";
      8. }
      9. @RequestMapping("/delete")
      10. @ResponseBody
      11. public String save(){
      12. System.out.println("user delete ...");
      13. return "{'module':'user delete'}";
      14. }
      15. }
      16. @Controller
      17. public class BookController {
      18. @RequestMapping("/save")
      19. @ResponseBody
      20. public String save(){
      21. System.out.println("book save ...");
      22. return "{'module':'book save'}";
      23. }
      24. }

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

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

      从错误信息可以看出:

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

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

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

    三、设置映射路径

    步骤1:修改Controller

    1. @Controller
    2. public class UserController {
    3. @RequestMapping("/user/save")
    4. @ResponseBody
    5. public String save(){
    6. System.out.println("user save ...");
    7. return "{'module':'user save'}";
    8. }
    9. @RequestMapping("/user/delete")
    10. @ResponseBody
    11. public String save(){
    12. System.out.println("user delete ...");
    13. return "{'module':'user delete'}";
    14. }
    15. }
    16. @Controller
    17. public class BookController {
    18. @RequestMapping("/book/save")
    19. @ResponseBody
    20. public String save(){
    21. System.out.println("book save ...");
    22. return "{'module':'book save'}";
    23. }
    24. }

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

    步骤2:优化路径配置

    优化方案:

    1. @Controller
    2. @RequestMapping("/user")
    3. public class UserController {
    4. @RequestMapping("/save")
    5. @ResponseBody
    6. public String save(){
    7. System.out.println("user save ...");
    8. return "{'module':'user save'}";
    9. }
    10. @RequestMapping("/delete")
    11. @ResponseBody
    12. public String save(){
    13. System.out.println("user delete ...");
    14. return "{'module':'user delete'}";
    15. }
    16. }
    17. @Controller
    18. @RequestMapping("/book")
    19. public class BookController {
    20. @RequestMapping("/save")
    21. @ResponseBody
    22. public String save(){
    23. System.out.println("book save ...");
    24. return "{'module':'book save'}";
    25. }
    26. }

    小结

    注意:

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

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

       

  • 相关阅读:
    vmware设置桥接模式后ip设置
    第一章《初学者问题大集合》第2节:学会编程就可以成为软件工程师吗
    Pytest简介及jenkins集成
    Git分布式版本控制系统——git学习准备工作
    【故障诊断分析】FFT轴承故障诊断(包络谱)【含Matlab源码 2002期】
    RUST与Python对比分析
    SpringBoot 整合 Redis 全面教程:从配置到使用
    【Qt】信号和槽机制
    自动化控制系统的设计重点是什么?
    10.(Python数模)(预测模型二)LSTM回归网络(1→1)
  • 原文地址:https://blog.csdn.net/guanshengg/article/details/126298675