SpringMVC之综合示例讲解(用示例来带你学习SpringMVC)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: SpringMVC之综合示例讲解(用示例来带你学习SpringMVC)



前言

在上一期的博客中我们初步的了解学习SpringMVC框架的一些基础知识,也领略到了一些SpringMVC框架在开发中对我们的帮助与好处,今天这期博客各位老铁跟着我继续来学习SpringMVC的相关知识吧。

一、SpringMVC之常用注解

1. 注解说明

  1. @Controller:用于标识一个类是SpringMVC的控制器,它接收用户请求并返回相应的视图或数据
  2. @RequestMapping:用于映射请求的URL路径到控制器的处理方法。可以在类级别和方法级别使用,用于处理各种HTTP请求(GET、POST、PUT等)
  3. @RequestParam:用于将请求参数绑定到处理方法的参数上。可以指定参数的名称、是否必须以及默认值。
  4. @PathVariable:用于将URL中的占位符参数绑定到处理方法的参数上。通常用于RESTful风格的URL。
  5. @ResponseBody:用于将方法的返回值直接作为HTTP响应的内容返回给客户端。适用于返回JSON、XML等非HTML格式的数据
  6. @ModelAttribute:用于将请求参数绑定到一个对象上,并将该对象添加到模型中,可以在视图中获取。
  7. @RequestHeader:注解可以获取指定的请求头信息。
  8. @CookieValue:主要是将请求的Cookie数据,映射到功能处理方法的参数上。

2. 扩展延伸

springMVC注解

注解 说明
@GetMapping 处理get方式请求的映射
@PostMapping 处理post方式请求的映射
@PutMapping: 处理put方式请求的映射
@DeleteMapping 处理delete方式请求的映射
@RequestMapping(method=RequestMethod.GET) 它会将get映射到特定的方法上

3. 注解的作用展示

springMVC注解的作用领域

领域 作用说明
请求映射 指定URL路径与处理方法的映射关系,将请求分发到对应的方法进行处理。(如@RequestMapping、@GetMapping、@PostMapping等)
参数绑定 将请求中的参数绑定到方法的参数上,方便获取和处理请求参数。(如@RequestParam、@PathVariable、@RequestBody等)
响应处理 将方法的返回值转换为HTTP响应体,并返回给客户端。可以方便地返回JSON、XML等格式的数据。(如@ResponseBody、@RestController等)
表单处理 将方法的返回值转换为HTTP响应体,并返回给客户端。可以方便地返回JSON、XML等格式的数据。(如@ResponseBody、@RestController等)
异常处理 处理应用程序中出现的异常情况,并返回适当的错误信息或页面。(如@ExceptionHandler、@ControllerAdvice等)
会话管理 在会话中存储和获取数据,实现会话管理的功能。(如@SessionAttribute、@SessionAttributes等)
配置管理 配置和管理SpringMVC框架中的各种组件和配置项。(如@Configuration、@Bean、@ComponentScan等)

导入slf4j的相关依赖及配置项目

首先将pom.xml文件中原有的log4j的插件依赖替换为Slf4j的插件依赖,以及原有的log4j的核心包全替换为Slf4j的核心包。

pom.xml文件

<?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.0</modelVersion>
  <groupId>com.yx</groupId>
  <artifactId>yx_ssm</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>yx_ssm Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.plugin.version>3.7.0</maven.compiler.plugin.version>
    <!--添加jar包依赖-->
    <!--1.spring 5.0.2.RELEASE相关-->
    <spring.version>5.0.2.RELEASE</spring.version>
    <!--2.mybatis相关-->
    <mybatis.version>3.4.5</mybatis.version>
    <!--mysql-->
    <mysql.version>5.1.44</mysql.version>
    <!--pagehelper分页jar依赖-->
    <pagehelper.version>5.1.2</pagehelper.version>
    <!--mybatis与spring集成jar依赖-->
    <mybatis.spring.version>1.3.1</mybatis.spring.version>
    <!--3.dbcp2连接池相关 druid-->
    <commons.dbcp2.version>2.1.1</commons.dbcp2.version>
    <commons.pool2.version>2.4.3</commons.pool2.version>
    <!--4.log日志相关-->
    <!--  替换为slf4j日志相关 -->
    <log4j2.version>2.9.1</log4j2.version>
    <log4j2.disruptor.version>3.2.0</log4j2.disruptor.version>
    <slf4j.version>1.7.13</slf4j.version>
    <!--5.其他-->
    <junit.version>4.12</junit.version>
    <servlet.version>4.0.0</servlet.version>
    <lombok.version>1.18.2</lombok.version>
    <!-- jstl+standard -->
    <jstl.version>1.2</jstl.version>
    <standard.version>1.1.2</standard.version>
    <!-- spring -->
    <spring.version>5.0.2.RELEASE</spring.version>
  </properties>
  <dependencies>
    <!--1.spring相关-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-orm</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--2.mybatis相关-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>${mybatis.version}</version>
    </dependency>
    <!--mysql-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>${mysql.version}</version>
    </dependency>
    <!--pagehelper分页插件jar包依赖-->
    <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>${pagehelper.version}</version>
    </dependency>
    <!--mybatis与spring集成jar包依赖-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>${mybatis.spring.version}</version>
    </dependency>
    <!--3.dbcp2连接池相关-->
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-dbcp2</artifactId>
      <version>${commons.dbcp2.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-pool2</artifactId>
      <version>${commons.pool2.version}</version>
    </dependency>
    <!--4.log日志相关依赖-->
    <!--核心log4j2jar包-->
    <!--替换为 slf4j包   -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>${slf4j.version}</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jcl-over-slf4j</artifactId>
      <version>${slf4j.version}</version>
      <scope>runtime</scope>
    </dependency>
    <!--核心log4j2jar包-->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>${log4j2.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>${log4j2.version}</version>
    </dependency>
    <!--用于与slf4j保持桥接-->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-slf4j-impl</artifactId>
      <version>${log4j2.version}</version>
    </dependency>
    <!--web工程需要包含log4j-web,非web工程不需要-->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-web</artifactId>
      <version>${log4j2.version}</version>
      <scope>runtime</scope>
    </dependency>
    <!--需要使用log4j2的AsyncLogger需要包含disruptor-->
    <dependency>
      <groupId>com.lmax</groupId>
      <artifactId>disruptor</artifactId>
      <version>${log4j2.disruptor.version}</version>
    </dependency>
    <!--5.其他-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>${servlet.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>${lombok.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>compile</scope>
    </dependency>
    <!-- spring mvc相关依赖 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>${jstl.version}</version>
    </dependency>
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>${standard.version}</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>yx_ssm</finalName>
    <resources>
      <!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题-->
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.xml</include>
        </includes>
      </resource>
      <!--解决mybatis-generator-maven-plugin运行时没有将jdbc.properites文件放入target文件夹的问题-->
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>jdbc.properties</include>
          <include>*.xml</include>
        </includes>
      </resource>
    </resources>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>${maven.compiler.plugin.version}</version>
          <configuration>
            <source>${maven.compiler.source}</source>
            <target>${maven.compiler.target}</target>
            <encoding>${project.build.sourceEncoding}</encoding>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.mybatis.generator</groupId>
          <artifactId>mybatis-generator-maven-plugin</artifactId>
          <version>1.3.2</version>
          <dependencies>
            <!--使用Mybatis-generator插件不能使用太高版本的mysql驱动 -->
            <dependency>
              <groupId>mysql</groupId>
              <artifactId>mysql-connector-java</artifactId>
              <version>${mysql.version}</version>
            </dependency>
          </dependencies>
          <configuration>
            <overwrite>true</overwrite>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
  </build>
</project>

二、参数传递

配置运行项目

1. 基础类型+String类型

测试代码

package com.yx.web;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
 * @author 君易--鑨
 * @site www.yangxin.com
 * @company 木易
 * @create  2023-09-05 15:22
 * 用于实现参数传递的控制器类
 */
@Slf4j
@Controller
@RequestMapping("/yx")
public class ParamController {
    @RequestMapping("/test01")//标记方法
    public String test01a(String bname,Integer bid){//参数
        log.info("简单类型参数:bname:{},bid:{}",bname,bid);
        return "index";//返回的页面
    }
}

测试结果

页面

控制台

2. 复杂类型

测试代码
package com.yx.web;
import com.yx.model.Book;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
/**
 * @author 君易--鑨
 * @site www.yangxin.com
 * @company 木易
 * @create  2023-09-05 15:22
 * 用于实现参数传递的控制器类
 */
@Slf4j
@Controller
@RequestMapping("/yx")
public class ParamController {
    @RequestMapping("/test02")//标记方法
    public String test02(Book book, HttpServletRequest request){//参数
        //        复杂传参输出方式01
        log.info("复杂类型参数:bname:{},bid:{},price{}",
                request.getParameter("bname"),
                request.getParameter("bid"),
                request.getParameter("price"));
//        复杂传参输出方式02
        log.info("复杂类型参数:book:{}",book.toString());
        return "index";//返回的页面
    }
}
测试结果
页面

控制台

3. @RequestParam

测试代码
package com.yx.web;
import com.yx.model.Book;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletRequest;
/**
 * @author 君易--鑨
 * @site www.yangxin.com
 * @company 木易
 * @create  2023-09-05 15:22
 * 用于实现参数传递的控制器类
 */
@Slf4j
@Controller
@RequestMapping("/yx")
public class ParamController {
    @RequestMapping("/test03")//标记方法
    public String test03(
           @RequestParam String bname,
           @RequestParam(required = false) Integer bid){//参数
        log.info("@requestParam传参:bname:{},bid:{}",bname,bid);
        return "index";//返回的页面
    }
}
测试结果
结果一:

页面

控制台输出

结果二:

页面

控制台

结果三:

页面

控制台输出

不会输出任何结果。

注:@RequestParam的required属性

该参数是否为必传项。默认是true,表示请求中一定要传入对应的参数,否则会报404错误,如果设置为false时,当请求中没有此参数,将会默认为null,而对于基本数据类型的变量,则必须有值,这时会抛出空指针异常。如果允许空值,则接口中变量需要使用包装类来声明。

4. @PathVariable

测试代码
package com.yx.web;
import com.yx.model.Book;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletRequest;
/**
 * @author 君易--鑨
 * @site www.yangxin.com
 * @company 木易
 * @create  2023-09-05 15:22
 * 用于实现参数传递的控制器类
 */
@Slf4j
@Controller
@RequestMapping("/yx")
public class ParamController {
    @RequestMapping("/test04/{bid}")//标记方法
    public String test04(
           @PathVariable("bid") Integer bid){//参数
        log.info("@PathVariable传参:bid:{}",bid);
        return "index";//返回的页面
    }
}
测试结果
页面

控制台输出

5.@RequestBody

导入@RequestBody依赖

<jackson.version>2.9.3</jackson.version>
//======以上代码添加到pom.xml文件中的 <properties>标签中=======================
//======以下代码添加到pom.xml文件中的 <dependencies>标签中====================
<dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>${jackson.version}</version>
    </dependency>
测试代码

请使用postman或者apipost/eolink等工具发送请求数据。因为浏览器无法携带集合参数,所以借助第三方软件进行测试。

 

package com.yx.web;
import com.yx.model.Book;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
/**
 * @author 君易--鑨
 * @site www.yangxin.com
 * @company 木易
 * @create  2023-09-05 15:22
 * 用于实现参数传递的控制器类
 */
@Slf4j
@Controller
@RequestMapping("/yx")
public class ParamController {
    @RequestMapping("/test05")//标记方法
    public String test05(
           @RequestBody Map map){//参数
        log.info("@RequestBody传参:map:{}",map);
        return "index";//返回的页面
    }
}

第三方软件测试操作

控制台输出结果

6. @RequestHeader

测试代码
package com.yx.web;
        import com.yx.model.Book;
        import lombok.extern.slf4j.Slf4j;
        import org.springframework.stereotype.Controller;
        import org.springframework.web.bind.annotation.*;
        import javax.servlet.http.HttpServletRequest;
        import java.util.Map;
/**
 * @author 君易--鑨
 * @site www.yangxin.com
 * @company 木易
 * @create  2023-09-05 15:22
 * 用于实现参数传递的控制器类
 */
@Slf4j
@Controller
@RequestMapping("/yx")
public class ParamController {
    @RequestMapping("/test06")//标记方法
    public String test06(
            @RequestHeader("jwt") String jwt){//参数
        log.info("@RequestHeader传参:jwt:{}",jwt);
        return "index";//返回的页面
    }
}

第三方测试操作

控制台输出结果

三、方法返回值

创建一个ReturnController类模拟测试案例

案例一:void

借助工具类
package com.yx.untils;
import com.fasterxml.jackson.databind.ObjectMapper;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
public class ResponseUtil {
  public static void write(HttpServletResponse response,Object o)throws Exception{
    response.setContentType("text/html;charset=utf-8");
    PrintWriter out=response.getWriter();
    out.println(o.toString());
    out.flush();
    out.close();
  }
  public static void writeJson(HttpServletResponse response,Object o)throws Exception{
    ObjectMapper om = new ObjectMapper();
//    om.writeValueAsString(o)代表了json串
    write(response, om.writeValueAsString(o));
  }
}
测试类代码
package com.yx.web;
import com.yx.untils.ResponseUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
/**
 * @author 君易--鑨
 * @site www.yangxin.com
 * @company 木易
 * @create  2023-09-06 18:45
 * 测试类
 */
@Controller
@RequestMapping("/rs")
public class ReturnController {
    @RequestMapping("/hello1")
    public void hello1(HttpServletResponse response){
        Map<String,Object> map=new HashMap<>();
        map.put("code",200);
        map.put("msg","成功添加...");
        try {
            ResponseUtil.writeJson(response,map);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
测试结果(页面显示结果)

案例二:String

该返回值类型在前面的参数传递中已经体现了。

案例三:String+model

jsp文件代码
<%--
  Created by IntelliJ IDEA.
  User: 86158
  Date: 2023/9/5
  Time: 15:49
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>Hello 君易--鑨</h1>
名称:${name}
地址:${address}
</body>
</html>
测试代码
package com.yx.web;
import com.yx.untils.ResponseUtil;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
/**
 * @author 君易--鑨
 * @site www.yangxin.com
 * @company 木易
 * @create  2023-09-06 18:45
 * 测试类
 */
@Controller
@RequestMapping("/rs")
public class ReturnController {
    @RequestMapping("/hello2")
    public String hello2(Model model,
                       HttpServletRequest request){
          model.addAttribute("name","君易--鑨");
          request.setAttribute("address","长沙");
      return "index";
    }
}
运行测试结果

案例四:ModelAndView

测试代码
package com.yx.web;
import com.yx.untils.ResponseUtil;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
/**
 * @author 君易--鑨
 * @site www.yangxin.com
 * @company 木易
 * @create  2023-09-06 18:45
 * 测试类
 */
@Controller
@RequestMapping("/rs")
public class ReturnController {
    @RequestMapping("/hello3")
    public ModelAndView hello3(){
        ModelAndView mv=new ModelAndView();
        mv.addObject("sign","真厉害");
        mv.setViewName("index");
        return mv;
    }
}
jsp文件
<%--
  Created by IntelliJ IDEA.
  User: 86158
  Date: 2023/9/5
  Time: 15:49
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>Hello 君易--鑨</h1>
名称:${name}
地址:${address}
评价:${sign}
</body>
</html>
测试结果

四、页面跳转

测试代码
package com.yx.web;
import com.yx.untils.ResponseUtil;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
/**
 * @author 君易--鑨
 * @site www.yangxin.com
 * @company 木易
 * @create  2023-09-06 18:45
 * 测试类
 */
@Controller
@RequestMapping("/rs")
public class ReturnController {
//    场景一
    @RequestMapping("/hello4")
    public String hello4(){
        System.out.println("hello4...");
        return "forward:hello2";
    }
//    场景二:
    @RequestMapping("/hello5")
    public String hello5(){
        System.out.println("hello5...");
        return "forward:/yx/test05";
    }
//    场景三:
    @RequestMapping("/hello6")
    public String hello6(){
        System.out.println("hello6...");
        return "redirect:hello2";
    }
    //    场景四:
    @RequestMapping("/hello7")
    public String hello7(){
        System.out.println("hello7...");
        return "redirect:/yx/test05";
    }
}

场景一:(转发到后台的某一个方法(当前类))

测试结果

场景二:(转发到后台的某一个方法(其他类))

测试结果

场景三:(重定向到后台的某一个方法(当前类))

测试结果

场景四:(重定向到后台的某一个方法(其他类))

测试结果

结论

  • 返回值中有forward、redirect,那么会绕过试图解析器。
  • 重定向会改变请求路径,转发不会。

这期分享到此结束,感谢各位老铁的大力支持

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
9月前
|
JSON 人工智能 Java
SpringBoot实战(九):标准化json返回值
SpringBoot实战(九):标准化json返回值
|
6月前
|
JSON 前端开发 Java
学习SpringMvc第二战之【SpringMVC之综合案例】
学习SpringMvc第二战之【SpringMVC之综合案例】
|
21天前
|
前端开发 Java
SpringBoot之实体参数的详细解析
SpringBoot之实体参数的详细解析
15 0
|
7月前
|
JSON 对象存储 数据格式
SpringMvc--综合案例
SpringMvc--综合案例
26 0
|
9月前
|
JavaScript 前端开发 Java
SpringMVC 映射请求数据获取案例--模型数据
SpringMVC 映射请求数据获取案例--模型数据
64 0
|
JSON Java 数据格式
SpringBoot 实战:在 RequestBody 中优雅的使用枚举参数(原理篇)
在优雅的使用枚举参数(原理篇)中我们聊过,Spring对于不同的参数形式,会采用不同的处理类处理参数,这种形式,有些类似于策略模式。
564 0
SpringBoot 实战:在 RequestBody 中优雅的使用枚举参数(原理篇)
|
存储 JSON 前端开发
SpringMVC示例|学习笔记
快速学习SpringMVC示例
102 0
SpringMVC示例|学习笔记
【SpringMVC 从 0 开始】SpringMVC RESTFul 实战案例 - 实现列表功能
【SpringMVC 从 0 开始】SpringMVC RESTFul 实战案例 - 实现列表功能
【SpringMVC 从 0 开始】SpringMVC RESTFul 实战案例 - 实现列表功能
|
JavaScript 前端开发 网络架构
【SpringMVC 从 0 开始】SpringMVC RESTFul 实战案例 - 实现删除功能
【SpringMVC 从 0 开始】SpringMVC RESTFul 实战案例 - 实现删除功能
【SpringMVC 从 0 开始】SpringMVC RESTFul 实战案例 - 实现删除功能
|
数据采集 JSON 前端开发
Springboot项目如何统一返回格式
Springboot项目如何统一返回格式
358 0