Spring-mvc的参数传递与常用注解的解答及页面的跳转方式---综合案例

目录

一.slf4j--日志

二.常用注解

2.1.@RequestMapping

2.2.@RequestParam

2.3.@RequestBody

2.4.@PathVariable

三.参数的传递

[3.1 基础类型](#3.1 基础类型)

[3.2 复杂类型](#3.2 复杂类型)

[3.3 @RequestParam](#3.3 @RequestParam)

[3.4 @PathVariable](#3.4 @PathVariable)

[3.5 @RequestBody](#3.5 @RequestBody)

[3.6 增删改查](#3.6 增删改查)

四.返回值

[4.1 void 返回值](#4.1 void 返回值)

[4.2 String 返回值](#4.2 String 返回值)

[4.3 model+String ​编辑](#4.3 model+String 编辑)

[五.页面跳转 --转发和重定向](#五.页面跳转 --转发和重定向)


一.slf4j--日志

SLF4J(Simple Logging Facade for Java)是Java应用程序中常用的日志记录框架。日志是记录应用程序运行时产生的事件、错误和信息的一种机制。用日志打印代替sout打印

使用SLF4J可以带来以下好处:

  1. 统一接口:SLF4J提供了一套简单的、统一的API来进行日志记录,开发人员无需关心具体使用哪个日志实现,只需与SLF4J进行交互即可。

  2. 基于级别的日志记录:SLF4J支持不同的日志级别(如DEBUG、INFO、WARN、ERROR等),可以根据需要设置不同的级别来记录日志。这对于应用程序的调试和故障排查非常有用。

  3. 日志格式化:SLF4J支持灵活的日志格式化选项,可以自定义日志的输出格式,例如添加时间戳、线程信息等。

  4. 运行时动态切换日志实现:SLF4J允许在运行时动态地切换使用的日志实现,这使得应用程序可以灵活地适应不同的部署环境和需求。

二.常用注解

2.1.@RequestMapping

@RequestMapping注解是一个用来处理请求地址映射的注解,可用于映射一个请求或一个方法,可以用在类或方法上。

2.2.@RequestParam

@RequestParam主要用于将请求参数区域的数据映射到控制层方法的参数上

2.3.@RequestBody

@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(即请求体中的数据的

GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。

2.4.@PathVariable

该注解请求URI中的模板变量部分到处理器功能处理方法的方法参数上的绑定。

即当使用@RequestMapping URI template 样式映射时, 即 someUrl/{paramId}, 这时的paramId可通过 @Pathvariable注解绑定它传过来的值到方法的参数上。

三.参数的传递

先来在pom.xml配置文件中导入SLF4J的依赖

复制代码
<log4j2.version>2.9.1</log4j2.version>
<log4j2.disruptor.version>3.2.0</log4j2.disruptor.version>
<slf4j.version>1.7.13</slf4j.version>

<!--4.log日志相关依赖-->

<!-- log4j2日志相关依赖 -->
<!-- log配置:Log4j2 + Slf4j -->
<!-- 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>

3.1 基础类型

测试结果:

3.2 复杂类型

测试结果:

3.3 @RequestParam

复制代码

测试结果:

3.4 @PathVariable

复制代码

测试结果:

3.5 @RequestBody

在使用这个注解的时候我们还需要配置pom.xml文件,导入json的格式

复制代码
 <jackson.version>2.9.3</jackson.version>
 
 <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>
复制代码

这个地方需要借助一个测试软件传参数,我用的是Eolink

3.6 增删改查

@RequestMapping=@PostMapping+@GetMapping+@DeleteMapping+@PutMapping

复制代码
    @PutMapping  //修改
    public String test2(){
        log.info("PutMapping修改");
        return "index";
    }

    @DeleteMapping //删除
    public String test3(){
        log.info("DeleteMapping删除");
        return "index";
    }

    @GetMapping  //查询
    public String test4(){
        log.info("GetMapping查询");
        return "index";
    }

    @PostMapping  //新增
    public String test5(){
        log.info("PostMapping新增");
        return "index";
    }

**-----既然RequestMapping可以代替所有为什么不用它??

-----因为RequestMapping不安全,并且不具备标识意义**

如果没有选择请求方式那么,就会选择get方式,调用查询的方法

只有当我们选择的时候,它才会指定调用

四.返回值

4.1 void 返回值

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

测试结果:

4.2 String 返回值

4.3 model+String

测试结果:

五.页面跳转 --转发和重定向

转发和重定向的实现方式有所不同。转发是在服务器端进行处理,服务器接收到用户的请求后,将请求转发到另一个URL,并将响应返回给用户。重定向是通过发送特定的HTTP响应代码来告诉浏览器将用户的请求重定向到另一个URL,浏览器接收到重定向响应后,会自动发送新的请求到重定向的URL。

使用场景方面,转发适用于需要在服务器端进行一些处理后,将请求转发到其他页面或处理逻辑的情况。转发可以保持用户的URL不变,用户在浏览器中看到的URL仍然是原始的URL。重定向适用于需要将用户导航到其他页面或处理逻辑的情况,重定向会导致浏览器发送新的请求到重定向的URL,并在浏览器的地址栏中显示新的URL。 增删改都是用重定向

相关推荐
真实的菜5 分钟前
Java NIO 面试全解析:9大核心考点与深度剖析
java·面试·nio
飞翔的佩奇21 分钟前
Java项目:基于SSM框架实现的劳务外包管理系统【ssm+B/S架构+源码+数据库+毕业论文】
java·mysql·spring·毕业设计·ssm·毕业论文·劳务外包
luckywuxn36 分钟前
EurekaServer 工作原理
java·eureka
壹米饭39 分钟前
Java程序员学Python学习笔记一:学习python的动机与思考
java·后端·python
java金融41 分钟前
Java 锁升级机制详解
java
Young556644 分钟前
还不了解工作流吗(基础篇)?
java·workflow·工作流引擎
让我上个超影吧1 小时前
黑马点评【缓存】
java·redis·缓存
ajassi20001 小时前
开源 java android app 开发(十一)调试、发布
android·java·linux·开源
YuTaoShao1 小时前
Java八股文——MySQL「存储引擎篇」
java·开发语言·mysql
crud1 小时前
Java 中的 synchronized 与 Lock:深度对比、使用场景及高级用法
java