Spring MVC入门必读:注解、参数传递、返回值和页面跳转(下)

简介: Spring MVC入门必读:注解、参数传递、返回值和页面跳转(下)

2.4.@PathVariable

Controller编写:

@Slf4j
@Controller
@RequestMapping("/csdn")
public class IndexController {
  @RequestMapping("/list03/{id}")
    public String list03(@PathVariable("id") Integer id) {
        log.info("@PathVariable:  id{}",id);
        return "hello";
    }
}


此时请求映射的请求路径为:

http://localhost:8080/Spring_MyBatis/csdn/list03/7


2.5.@RequestBody

讲解@RequestBody之前,将大家推荐postman或者apipost/eolink等工具发送请求数据。

这些工具可以帮助您模拟发送请求和接收响应,以便更好地理解@RequestBody参数的含义和使用方法。

Controller编写:

@Slf4j
@Controller
@RequestMapping("/csdn")
public class IndexController {
 @RequestMapping("/list04")
    public String list04(Map map) {
        log.info("没有注解:  Map:{}",map);
        return "hello";
    }
    @RequestMapping("/list05")
    public String list05(@RequestBody Map map) {
        log.info("@ResponseBody:  Map:{}",map);
        return "hello";
    }
}


此时请求映射的请求路径为:

http://localhost:8080/Spring_MyBatis/csdn/list04

测试没有注解的

572b38ca988b4a80a2be5ddf8a7e7055.png

结果是没有获取到参数

测试有注解的

31285b834c9f4d92af54af72fd2c60b8.png

可以获取到参数结果


2.6.@RequestHeader

Controller编写:

@Slf4j
@Controller
@RequestMapping("/csdn")
public class IndexController {
  @RequestMapping("/list06")
    public String list06(@RequestHeader String jwt) {
        log.info("@RequestHeader:  jwt:{}",jwt);
        return "hello";
    }
}


此时请求映射的请求路径为:

http://localhost:8080/Spring_MyBatis/csdn/list06


三、返回值


为了方便模拟效果,借助ResponseUtil工具类,ResponseUtil类提供了一种方便的方式来将对象以文本或JSON格式写入HTTP响应流中,以便在Web应用程序中向客户端返回数据。

package com.liwen.util;
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));
  }
}


pom.xml依赖

<dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.12.4</version> <!-- 请根据您的需求选择合适的版本 -->
    </dependency>


3.1.void

处理器对请求处理后,无需跳转到其它任何资源,此时可以让处理器方法返回 void。

Controller编写:

@Slf4j
@Controller
@RequestMapping("/csdn")
public class IndexController {
   @RequestMapping("/return01")
    public void return01(HttpServletResponse resp){
    Map<String,Object> map=new HashMap<>();
    map.put("code",200);
    map.put("msg","成功添加。。。");
        try {
            ResponseUtil.writeJson(resp,map);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


f992a9a956244153b1b0c742457947f9.png


3.2.String

通过http://localhost:8080/Spring_MyBatis/csdn/return02访问请求方法,并经过视图解析器跳转指定页面。

Controller编写:

@Slf4j
@Controller
@RequestMapping("/csdn")
public class IndexController {
   @RequestMapping("/return02")
    public String return02( ){
       return "hello";
    }
}


网页效果:

1442e1698fc44dd18e33510d2dbc4ef0.png


3.3.String+Model

通过http://localhost:8080/Spring_MyBatis/csdn/return03访问请求方法,并经过视图解析器跳转指定页面。

Controller编写:

@Slf4j
@Controller
@RequestMapping("/csdn")
public class IndexController {
   @RequestMapping("/return03")
    public String return03(Model Model,HttpServletRequest req){
        Model.addAttribute("name","Java文昊");
        req.setAttribute("age",18);
        return "hello";
    }
}


JSP页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
用户名:${name}
年龄:${age}
</body>
</html>


3.4.ModelAndView

Controller编写:

@Slf4j
@Controller
@RequestMapping("/csdn")
public class IndexController {
   @RequestMapping("/return04")
    public ModelAndView return04(){
       ModelAndView mv=new ModelAndView();
       mv.addObject("name","湖南彭于晏-文昊桑");
        mv.addObject("age",18);
       mv.setViewName("hello");
        return mv;
    }
}


JSP页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<br>用户名:${name}
年龄:${age}
</body>
</html>


四、页面跳转


转发(forward:path)和重定向(redirect:path)这两种跳转方式将会绕开视图解析器的前缀后缀;还有就是如果是在同一controller中则不用使用"/"从根目录开始,而如果是在不同的controller则一定要从根目录开始。


4.1.转发forward

  • 当前类

Controller编写:

//  转发到当前类
    @RequestMapping("/forward01")
    public String forward01(){
        return "forward:return02";
    }
@RequestMapping("/return02")
    public String return02( ){
        return "hello";
    }


JSP页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
用户名:${name}
年龄:${age}
</body>
</html>


  • 其他类

Controller编写:

//  转发到其他类
    @RequestMapping("/forward02")
    public String forward02(){
        return "forward:/hello/requestTest";
    }
@Controller
@RequestMapping("/hello")
public class hello {
    @RequestMapping("/requestTest")
    public String Hello(){
        return "text";
    }
}


JSP页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
你好我是其他类跳转过来的
</body>
</html>


4.2.重定向redirect

  • 当前类

Controller编写:

 //  重定向到当前类
    @RequestMapping("/redirect01")
    public String redirect01(){
        return "redirect:return02";
    }
@RequestMapping("/return02")
    public String return02( ){
        return "hello";
    }


JSP页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
用户名:${name}
年龄:${age}
</body>
</html>


  • 其他类

Controller编写:

 //  重定向到其他类
    @RequestMapping("/redirect02")
    public String redirect02(){
        return "redirect:/hello/requestTest";
    }
@Controller
@RequestMapping("/hello")
public class hello {
    @RequestMapping("/requestTest")
    public String Hello(){
        return "text";
    }
}


JSP页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
你好我是其他类跳转过来的
</body>
</html>

8d40927485af4375956cf572871dc1ba.png

目录
相关文章
SpringMVC入门到实战------5、域对象共享数据 Request、Session、Application、Model、ModelAndView、Map、ModelMap的详细使用及代码实例
这篇文章详细解释了在IntelliJ IDEA中如何使用Mute Breakpoints功能来快速跳过程序中的后续断点,并展示了如何一键清空所有设置的断点。
SpringMVC入门到实战------5、域对象共享数据 Request、Session、Application、Model、ModelAndView、Map、ModelMap的详细使用及代码实例
SpringMVC入门到实战------ 十一 拦截器的使用
这篇文章介绍了SpringMVC中拦截器的使用,包括拦截器的配置、拦截器的三个抽象方法`preHandle`、`postHandle`和`afterCompletion`的作用,以及多个拦截器的执行顺序和规则。
SpringMVC入门到实战------ 十一 拦截器的使用
|
3月前
|
JSON 前端开发 JavaScript
SpringMVC入门到实战------九 HttpMessageConverter @RequestBody 、@ResponseBody 、RequestEntity、ResponseEntity
这篇文章详细介绍了SpringMVC中的`HttpMessageConverter`接口及其相关的`@RequestBody`、`@ResponseBody`、`RequestEntity`和`ResponseEntity`注解和类型的使用,包括如何将请求体转换为Java对象、如何将Java对象转换为响应体、以及如何处理JSON和AJAX请求。
SpringMVC入门到实战------九 HttpMessageConverter @RequestBody 、@ResponseBody 、RequestEntity、ResponseEntity
|
3月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
3月前
|
缓存 Java 应用服务中间件
SpringMVC入门到实战------七、SpringMVC创建JSP页面的详细过程+配置模板+实现页面跳转+配置Tomcat。JSP和HTML配置模板的差异对比(二)
这篇文章详细介绍了在SpringMVC中创建JSP页面的全过程,包括项目的创建、配置、Tomcat的设置,以及如何实现页面跳转和配置模板解析器,最后还对比了JSP和HTML模板解析的差异。
SpringMVC入门到实战------七、SpringMVC创建JSP页面的详细过程+配置模板+实现页面跳转+配置Tomcat。JSP和HTML配置模板的差异对比(二)
|
3月前
|
XML JSON 数据库
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
这篇文章详细介绍了RESTful的概念、实现方式,以及如何在SpringMVC中使用HiddenHttpMethodFilter来处理PUT和DELETE请求,并通过具体代码案例分析了RESTful的使用。
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
|
3月前
|
前端开发
SpringMVC入门到实战------六、SpringMVC的视图。ThymeleafView、转发视图、重定向视图、视图控制器的使用详解
这篇文章详细介绍了SpringMVC中的视图类型,包括ThymeleafView、转发视图、重定向视图和视图控制器的使用,以及如何通过源码查看确定使用的视图渲染器类型。
SpringMVC入门到实战------六、SpringMVC的视图。ThymeleafView、转发视图、重定向视图、视图控制器的使用详解
SpringMVC入门到实战------十二、异常处理器
这篇文章介绍了SpringMVC中拦截器的使用,包括拦截器的配置、拦截器的三个抽象方法`preHandle`、`postHandle`和`afterCompletion`的作用,以及多个拦截器的执行顺序和规则。
|
3月前
|
前端开发 应用服务中间件 数据库
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
这篇文章通过一个具体的项目案例,详细讲解了如何使用SpringMVC、Thymeleaf、Bootstrap以及RESTful风格接口来实现员工信息的增删改查功能。文章提供了项目结构、配置文件、控制器、数据访问对象、实体类和前端页面的完整源码,并展示了实现效果的截图。项目的目的是锻炼使用RESTful风格的接口开发,虽然数据是假数据并未连接数据库,但提供了一个很好的实践机会。文章最后强调了这一章节主要是为了练习RESTful,其他方面暂不考虑。
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
|
3月前
|
JavaScript 数据安全/隐私保护
SpringMVC入门到实战------4、SpringMVC获取请求参数(六种方式详细说明)
这篇文章介绍了在Vue中如何使用过滤器来隐藏手机号和邮箱等字符串的中间部分内容,以提高隐私保护。文章展示了实现效果,并提供了实现过程的代码示例,包括HTML部分的绑定、data部分的数据定义和script部分的过滤器定义。文章还解释了过滤器的概念、语法和使用方式,并提供了一个外部链接供读者获取更加详细的过滤器知识。
SpringMVC入门到实战------4、SpringMVC获取请求参数(六种方式详细说明)