优秀的编程知识分享平台

网站首页 > 技术文章 正文

Java笔记:Spring MVC中的常用注解,这些你都知道吗?

nanyue 2024-07-22 13:56:37 技术文章 7 ℃

本篇文章主要分为两大板块

  • SpringMVC中的常用注解
  • 使用注解实现简单的登录

SpringMVC中的常用注解

@Controller
@Controller注解标注是一个类是Web控制器,其和@Component注解等价,只不过在Web层使用,其便于区分类的作用。

@RequestMapping

@RequestMapping是Spring Web应用程序中最常被用到的注解之一。

在对SpringMVC进行配置的时候,需要指定请求与处理方法之间的映射关系,这时候就需要使用@RequestMapping注解。该注解可以在控制器类的级别和其方法级别上使用。

@RequestMapping注解能够处理的HTTP请求方法有: GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE 。

为了能够将一个请求映射到一个特定的HTTP方法,需要在@RequestMapping中使用method参数声

明HTTP请求所使用的方法类型。如下示例,在 TestController 中添加请求映射方法


返回类型:最常用的Controller 返回的类型()具体的返回的类型可以参考官方的文档:官方链接

String返回类型

有两种使用方式:

  • 返回 URI 资源路径的字符串,可以使用 redirect:/服务路径 表示重定向到某个路径,
  • forward:/服务路径 表示转发到某个路径,如果前边不写默认就是转发。

那么两者的区别是什么呢?

1.从地址栏显示来说:

1)forword是服务器内部的重定向,服务器直接访问目标地址的 url网址,把里面的东西读取出来,但是客户端并不知道,因此用forward的话,客户端浏览器的网址是不会发生变化的。

2)redirect是服务器根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,所以地址栏显示的是新的地址。

2、 从数据共享来说:

1)由于在整个定向的过程中用的是同一个request,因此forward会将request的信息带到被重定向的jsp或者servlet中使用。即可以共享数据

2)redirect不能共享

3.从运用的地方来说

1)forword 一般用于用户登录的时候,根据角色转发到相应的模块

2) redirect一般用于用户注销登录时返回主页面或者跳转到其他网站

4、 从效率来说:

1)forword效率高,而redirect效率低

5.从本质来说:

forword转发是服务器上的行为,而redirect重定向是客户端的行为

6.从请求的次数来说:

forword只有一次请求;而redirect有两次请求,

7.redirect属于临时重定向

返回普通的Java类型

返回类型为Object,一般使用带Getter,Setter方法的模型类

结合@ResponseBody使用,表示将对象序列化后的数据放在响应体返回

在SpringBoot中默认响应的Content-Type为 application/json

非字符串对象会自动序列化为 json 字符串

@ResponseBody
表示将控制器方法的返回序列化作为响应体内容返回前端。
根据之前《控制器方法的返回》说明,使用@ResponseBody注解:
1.返回类型为String,
表示响应Content-Type: text/plain,且响应体为控制器方法的字符串返回值
2.返回类型为普通Java类型,表示响应Content-Type: application/json,以返回对象序列化为json后
作为响应体。
3.@ResponseBody可以使用在类上,表示该类中所有方法都是默认以返回值作为响应体,也就是所
有方法都使用@ResponseBody。
注意:如果返回值为null,表示响应体内容为空。




组合注解

可以使用组合注解来完成同时定义多个注解的效果,如:@RestController,@GetMapping,@PostMapping

说明该注解使用在类上,和使用两个注解@Controller,@ResponseBody在类上意思一样

@GetMapping即是:@RequestMapping(method = RequestMethod.GET)

@PostMapping即是:@RequestMapping(method = RequestMethod.POST)

@PathVariable

一般的 URI 服务路径都是固定的,SpringMVC提供了 restful 风格可以变化的 URI。{}是将服务路径 URI 中的部分定义为变量,之后在方法参数中获取该路径变量。



@RequestParam

当请求数据要绑定到某个简单对象时,可以使用@RequestParam。

URL 中的请求数据queryString请求头,Content-Type为表单默认提交的格式 application/x-www-form-urlencoded ,请求体中

的数据

请求头,Content-Type为 multipart/form-data ,请求体中的数据。 form-data 可以提交文本

数据,也可以提交二进制文件。

以上简单对象包括:基本数据类型、包装类型、MultipartFile(接收二进制文件)

需要注意@RequestParam注解参数默认为 required=true ,如果不传该参数就会报错,需要指定

为: @RequestParam(required = false) 。


POJO(Plain Ordinary Java Object):简单的 java 对象,实际就是属性提供了Getter,Setter方法的

普通对象。

使用 java 对象和使用@RequestParam注解非常类似,只是有点细节不同:

@RequestParam是以方法参数变量名和传入的键对应,POJO对象作为方法参数时,是以POJO对

象中的属性名对应传入的键

@RequestParam默认必须传入该请求数据,而 POJO 对象是根据请求数据来填充属性,如果请求

数据没有,则属性就是默认值


POJO 对象同样可以直接获取 form-data 方式的数据,包括二进制文件



@RequestBody

当请求的数据类型Content-Type为 application/json 时,需要显示的使用@RequestBody注解。


@RequestPart

对于请求的数据类型Content-Type为 multipart/form-data 时,二进制文件除了以上

@RequestParam和 POJO 对象的方式外,还可以使用@RequestPart。



Servlet API

在控制器方法参数中,可以使用Servlet相关API,SpringMVC会自动将相关Servlet对象装配到方法参数

中,如 HttpServletRequest 、 HttpServletResponse 、 HttpSession 等

使用注解实现简单的登录

实现注册、并将User对象保存在session中



MVC模式登录:

Model:

View:

Controller:





最近发表
标签列表