SpringMVC注解全解析:构建高效Web应用的终极指南 (下)

news2024/9/24 3:17:47

一. 引言

在上篇文章中,我们介绍了几个重要的SpringMVC注解:

  1. @SpringBootApplication:Spring Boot项目的启动类注解。
  2. @RequestMapping:用于映射URL到控制器类或方法,支持多种请求方式。
  3. @RequestParam:用于绑定请求参数到方法的参数上,支持参数重命名。
  4. @PathVariable:用于将URL中的路径变量绑定到方法参数。
  5. @RequestPart:用于处理文件上传,将请求的一部分绑定到方法参数。

这些注解帮助我们简化了控制器开发,提升了代码的可读性和维护性。

在本篇文章中,我们将继续介绍另外几个常用的Spring MVC注解:@CookieValue、@SessionAttribute、@RequestHeader、@Controller和@RestController。

 二. SpringMVC 注解介绍

6) @CookieValue: 从 Cookie 中获取值 

  • 定义和作用:@CookieValue注解用于将HTTP请求中的Cookie值绑定到控制器方法的参数上。
  • 使用场景:当需要获取客户端存储的Cookie值时使用。
        回顾Cookie 与 Session

                HTTP 协议自身是属于 "⽆状态" 协议, 是指协议对于交互性场景没有记忆能力.

                于是,两种用于保持HTTP连接状态的技术就应运而生了(Cookie 与 Session).

Session 默认是保存在内存中的. 如果重启服务器则 Session 数据就会丢失. 

Cookie 和 Session 的区别

  • Cookie 是一种在客户端保存用户信息的机制。
  • Session 是一种在服务器端保存用户信息的机制。
  • Cookie 和 Session 主要通过 SessionId 关联,SessionId 是连接两者的桥梁。
  • Cookie 和 Session 经常一起使用,但这并不是必须的。

具体使用场景

  • 可以单独使用 Cookie 在客户端保存一些数据,这些数据不一定是用户身份信息,也不一定是 SessionId。
  • Session 中的 SessionId 不一定非要通过 Cookie/Set-Cookie 传递,也可以通过 URL 等其他方式传递。
​
@RequestMapping("/getCookie")
public String cookie(@CookieValue("pig") String bite) {
 return "pig:" + pig;
}

​

7) @SessionAttribute: 从 Session 中获取值

  • 定义和作用:@SessionAttribute注解用于将Session中的属性值绑定到控制器方法的参数上。
  • 使用场景:当需要获取存储在Session中的数据时使用。
@GetMapping("/session")
public String getSessionAttribute(@SessionAttribute("sessionAttribute") String sessionAttribute) {
    return "Session Attribute: " + sessionAttribute;
}
  1. 在上述代码中,@SessionAttribute注解绑定了Session中名为"sessionAttribute"的属性值。

8)  @RequestHeader: 从 Header 中获取值

  • 定义和作用:@RequestHeader注解用于将HTTP请求头中的值绑定到控制器方法的参数上。
  • 使用场景:当需要获取请求头中的特定值时使用。
  • 示例代码和讲解
@GetMapping("/header")
public String getHeaderValue(@RequestHeader("headerName") String headerValue) {
    return "Header Value: " + headerValue;
}

9) @Controller 定义一个控制器

  • 定义和作用:@Controller注解用于标识一个类为Spring MVC的控制器。
  • 与其他注解的区别@Controller注解标识的类默认返回视图,通常与模板引擎配合使用。
package org.example.springwebmvc;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@RequestMapping("/res")
@Controller
public class ResponseController {
    @RequestMapping("index")
    public String index(){
        return "/Test.html";
    }
}

前端代码如下:  

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>我是大帅比</h1>
</body>
</html>

 返回视图

10) @RestController

@RestController = @ResponseBody + @Controller 复合注解 

@ResponseBody 返回数据  @Controller  返回视图

三. 总结

在本文中,我们详细介绍了@CookieValue、@SessionAttribute、@RequestHeader、@Controller和@RestController这几个Spring MVC注解的定义、作用和使用场景,并通过具体的代码示例帮助理解。希望这些内容能够帮助你在开发Spring MVC应用时更好地使用这些注解。

 上篇文章

  • 参考资料与进一步阅读建议
    1. Spring 官方文档
    2. Spring MVC 教程

 下期更新 Spring IoC & DI !

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1933833.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

长难句打卡7.15

The trend was naturally most obvious in those areas of science based especially on a mathematical or laboratory training, and can be illustrated in terms of the development of geology in the United Kingdom 这一趋势自然在以数学或实验室训练为基础的科学领域里…

新版本cesium编译1.103之后的版本

cesium1.1之后的版本文件结构域1.1之前的版本有了很大的差别&#xff0c;源码也全部移到了packages目录中。有很多依赖包没有写在根目录的package.json文件中。npm i 后直接编译会保持。 cesium源码git https://github.com/CesiumGS/cesium 1、添加缺少的包&#xff0c;缺少的…

Java 8的变革:函数式编程和Lambda表达式探索

文章目录 一、函数接口二、Lambda表达式简介三、Lambda表达式外部参数四、Lambda范例五、Runnable Lambda表达式 一、函数接口 函数接口是一个具有单个抽象方法的接口&#xff0c;接口设计主要是为了支持 Lambda 表达式和方法引用&#xff0c;使得 Java 能更方便地实现函数式编…

【论文速读】| TCSR-SQL:面向表内容感知的自检索文本到SQL方法

本次分享论文&#xff1a;TCSR-SQL: Towards Table Content-aware Text-to-SQL with Self-retrieval 基本信息 原文作者&#xff1a;Wenbo Xu, Liang Yan, Peiyi Han, Haifeng Zhu, Chuanyi Liu, Shaoming Duan, Cuiyun Gao, Yingwei Liang 作者单位&#xff1a;哈尔滨工业大…

如何使用 Containerfile/Dockerfile 构建 .net 镜像?

Podman 简介 Podman 是 Red Hat 开发的一款容器管理工具&#xff0c;它允许用户在没有守护进程的情况下运行、构建、管理和推送容器。Podman 是一个无守护进程的容器引擎&#xff0c;这意味着它不需要一个持续运行的后台进程来管理容器&#xff0c;这与 Docker 的守护进程模式…

科普文:详解23种设计模式

概叙 设计模式是对大家实际工作中写的各种代码进行高层次抽象的总结&#xff0c;其中最出名的当属 Gang of Four&#xff08;GoF&#xff09;的分类了&#xff0c;他们将设计模式分类为 23 种经典的模式&#xff0c;根据用途我们又可以分为三大类&#xff0c;分别为创建型模式…

Anything in Any Scene:无缝融入任何场景,实现逼真视频对象插入技术

人工智能咨询培训老师叶梓 转载标明出处 现实世界的视频捕获虽然因其真实性而宝贵&#xff0c;但常常受限于长尾分布的问题&#xff0c;即常见场景过度呈现&#xff0c;而关键的罕见场景却鲜有记录。这导致了所谓的"分布外问题"&#xff0c;在模拟复杂环境光线、几何…

在Centos上安装MySQL

目录 在Centos上安装MySQL1.确认当前的系统版本2.添加 MySQL Yum 源2.1访问MySQL开发者专区2.2根据当前系统选择对应的发布包2.3补充 3.MySQL的历史发行版本4.安装发布包5.安装MySQL5.1启动MySQL服务器5.2查看服务器状态5.3开机自启动5.4 登入MySQL5.5修改密码 在Centos上安装M…

今日总结,没啥特别学习到的,还是省市县三级,和一些开发的规范和git的冲突解决。(maven clean)

20240718 一、对于省市县三级联动告一段落二、修改开发好的接口三、对于git&#xff08;每天都有他的问题&#xff09;的推送和拉取问题 一、对于省市县三级联动告一段落 省市县三级联动&#xff0c;直接前端连接一个组件就可以直接实现&#xff0c;好家伙&#xff0c;白费我时…

【深度学习】inpaint图像中的alpha混合图的边缘处理

比如原图是&#xff1a; 红圈内就是文字水印&#xff0c;经过inpaint后得到图和原图混合&#xff0c;如何处理边界呢&#xff0c;这个代码可以干这事&#xff1a; 越是中心就直接用inpaint图&#xff0c;否则就用原图&#xff0c;这样进行alpha混合。 import numpy as np i…

计算机网络技术期末复习

一. 填空 在采用电信号表达数据的系统中&#xff0c;数据有 数字数据 和 模拟数据 两种。域名系统DNS是一个 分布式数据库 系统。TCP/IP的网络层最重要的协议是 IP互连网协议&#xff0c;它可将多个网络连成一个互连网。 4. 在TCP/IP层次模型的网络层中包括的协议主要有ARP 、…

计算机毕业设计-基于Springboot的养老院管理系统-源码程序文档

项目源码&#xff0c;请关注❥点赞收藏并私信博主&#xff0c;谢谢~ 本系统开发采用技术为JSP、Bootstrap、Ajax、SSM、Java、Tomcat、Maven 此文章为本人亲自指导加编写&#xff0c;禁止任何人抄袭以及各类盈利性传播&#xff0c; 相关的代码部署论文ppt代码讲解答辩指导文件…

【C++】类的默认成员函数--构造,析构,拷贝,重载

文章目录 前言一、类的默认成员函数是什么&#xff1f;二、构造函数1.构造函数概述2.构造函数特点3.构造函数代码示例 三.析构函数1.析构函数概述2.析构函数特点3.析构函数代码示例 四.拷贝构造函数1.拷贝构造函数概述2.拷贝构造函数特点拷贝构造函数代码示例 五. 赋值运算符重…

学习008-01-03 Customize the Application UI and Behavior(自定义应用程序UI和行为)

Customize the Application UI and Behavior&#xff08;自定义应用程序UI和行为&#xff09; In XAF, the data model defines the database structure and UI. Changes to your entity classes affect the UI. For example, if you add a new property to an entity class, …

解决PDF文件无法打印的困扰:快速排查与修复指南

在日常工作和学习中&#xff0c;PDF文件因其跨平台兼容性和良好的格式保持特性而广受欢迎。然而&#xff0c;当我们急需打印一份重要的PDF文件时&#xff0c;却遇到了“PDF无法打印”的尴尬情况&#xff0c;这无疑会让人感到焦急。别担心&#xff0c;本文将为你提供一系列快速排…

摄像馆唯美结婚摄影团队网站模版源码 自适应网站源码系统 前后端分离 带完整的安装代码包以及搭建教程

系统概述 摄像馆唯美结婚摄影团队网站模版源码&#xff0c;是一款集美观性、功能性与易用性于一体的网站解决方案。该系统采用最新的前端技术栈&#xff0c;如HTML5、CSS3、JavaScript等&#xff0c;结合响应式设计理念&#xff0c;确保网站能够在不同尺寸的设备上&#xff08…

在 Apifox 中如何高效批量添加接口请求 Body 参数?

在使用 Apifox 进行 API 设计时&#xff0c;你可能会遇到需要添加大量请求参数的情况。想象一下&#xff0c;如果一个接口需要几十甚至上百个参数&#xff0c;若要在接口的「修改文档」里一个个手动添加这些参数&#xff0c;那未免也太麻烦了&#xff0c;耗时且易出错。这时候&…

Python实现人脸识别

直接上代码&#xff1a; import face_recognition import time from PIL import Image, ImageDraw def faceRecognition(fileName): # 加载图片image face_recognition.load_image_file(fileName)# 人脸定位beginTime time.time()face_locations face_recognition.face_lo…

Python酷库之旅-第三方库Pandas(024)

目录 一、用法精讲 61、pandas.to_numeric函数 61-1、语法 61-2、参数 61-3、功能 61-4、返回值 61-5、说明 61-6、用法 61-6-1、数据准备 61-6-2、代码示例 61-6-3、结果输出 62、pandas.to_datetime函数 62-1、语法 62-2、参数 62-3、功能 62-4、返回值 62-…

为ppt中的文字配色

文字的颜色来源于ppt不可删去的图像的颜色 从各类搜索网站中搜索ppt如何配色&#xff0c;有如下几点&#xff1a; 1.可以使用对比色&#xff0c;表示强调。 2.可以使用近似色&#xff0c;使得和谐统一。 3.最好一张ppt中&#xff0c;使用的颜色不超过三种主要颜色。 但我想强调…