SpringMVC 从入门到精通系列 03 —— 常用注解

2023-10-27


1. RequestParam 注解

  • 作用: 把请求中的指定名称的参数传递给控制器中的形参赋值

  • 属性:

    1. value: 请求参数中的名称
    2. required: 请求参数中是否必须提供此参数,默认值是true,必须提供(如果不提供会报错)
  • 代码如下:

    jsp:

    <a href="anno/testRequestParam?username=xiuyan">测试RequestParam</a>
    

    Controller:

    @Controller
    @RequestMapping(path = "/anno")
    public class AnnoController {
    
        @RequestMapping(path = "/testRequestParam")
        public String testRequestParam(@RequestParam(value = "username") String name){
            System.out.println("测试RequestParam注解");
            System.out.println(name);
            return "success";
        }
    }
    

    测试结果:
    在这里插入图片描述


2. RequestBody 注解

  • 作用:用于获取请求体的内容(注意:get方法不可以)

  • 属性: required,是否必须有请求体,默认值是true

  • 代码如下:

    jsp:

    <form action="anno/testRequestBody" method="post">
        姓名:<input type="text" name="uname"><br>
        年龄:<input type="text" name="age"><br>
        <input type="submit" value="提交" />
    </form>
    

    Controller:

    @Controller
    @RequestMapping(path = "/anno")
    public class AnnoController {
    
        @RequestMapping(path = "/testRequestBody")
        public String testRequestBody(@RequestBody String body){
            System.out.println("测试RequestBody注解");
            System.out.println(body);
            return "success";
        }
    }
    

    测试结果:
    在这里插入图片描述
    在这里插入图片描述

    注:@RequestBody在实际运用中需要注意的地方

    后台用于接收对象,需注意三点:post请求方式、contentType、json对象的字符串(不是 json 对象)。

    在这里插入图片描述  在这里插入图片描述
    在这里插入图片描述


3. PathVariable 注解

  • 作用:拥有绑定url中的占位符的。 例如:url中有/delete/{id},{id}就是占位符

  • 属性: value,指定url中的占位符名称

  • Restful 风格的 URL:

    1. 请求路径一样,可以根据不同的请求方式去执行后台的不同方法
    2. restful风格的URL优点:结构清晰、符合标准、易于理解、扩展方便
  • 代码如下:

    jsp:

    <a href="anno/testPathVariable/111">测试PathVariable</a>
    

    Controller:

    @Controller
    @RequestMapping(path = "/anno")
    public class AnnoController {
    
        @RequestMapping(path = "/testPathVariable/{sid}")
        public String testPathVariable(@PathVariable(name="sid") String id){
            System.out.println("测试PathVariable注解");
            System.out.println(id);
            return "success";
        }
    }
    

    在这里插入图片描述


4. RequestHeader 注解(了解)

  • 作用:获取指定请求头的值

  • 属性: value,请求头的名称

  • 代码如下

    @RequestMapping(path="/hello")
    public String sayHello(@RequestHeader(value="Accept") String header) {
    	System.out.println(header);
    	return "success";
    }
    

5. CookieValue 注解(了解)

  • 作用:用于获取指定cookie的名称的值

  • 属性: value,cookie的名称

  • 代码:

    @RequestMapping(path="/hello")
    public String sayHello(@CookieValue(value="JSESSIONID") String cookieValue) {
    	System.out.println(cookieValue);
    	return "success";
    }
    

6. ModelAttribute 注解

  • 作用:
    1. 出现在方法上:表示当前方法会在控制器方法执行前先执行。
    2. 出现在参数上:获取指定的数据给参数赋值。
  • 应用场景: 当提交表单数据不是完整的实体数据时,保证没有提交的字段使用数据库原来的数据。
  • 具体的代码:

有返回值:

jsp:

<form action="anno/testModuleAttribute" method="post">
	姓名:<input type="text" name="username"><br>
	年龄:<input type="text" name="age"><br>
	<input type="submit" value="提交" />
</form>

Controller:

@RequestMapping(path="/testModuleAttribute")
public String testModuleAttribute( User user){
    System.out.println("showUser方法执行了");
    System.out.println(user);
    return "success";
}

/**
 * 该方法会先执行(有返回值)
*/
@ModelAttribute
public User showUser(String username){
    System.out.println("测试ModuleAttribute注解");
    // 模拟通过 username 查询数据库
    User user = new User();
    user.setUsername("xiuyan");
    user.setAge(22);
    user.setDate(new Date());
    return user;
}

测试结果:
在这里插入图片描述
在这里插入图片描述

  结果显示,由于先执行 showUser 方法,在方法里面封装了 User 对象并返回,从而再执行 testModuleAttribute 方法时,不会因为传入表单没有传入日期属性,而导致日期属性为空。


无返回值:

@RequestMapping(path="/testModuleAttribute")
public String testModuleAttribute(@ModelAttribute("abc") User user){
    System.out.println("showUser方法执行了");
    System.out.println(user);
    return "success";
}

/**
 * 无返回值
 */
@ModelAttribute
public void showUser(String username, Map<String, User> map){
    System.out.println("测试ModuleAttribute注解");
    // 模拟通过 username 查询数据库
    User user = new User();
    user.setUsername("xiuyan");
    user.setAge(22);
    user.setDate(new Date());
    map.put("abc", user);
}

测试结果:
在这里插入图片描述
在这里插入图片描述


7. SessionAttributes 注解

  • 作用:用于多次执行控制器方法间的参数共享

  • 属性: value,指定存入属性的名称

  • 代码如下:

    jsp:

    <a href="anno/testSessionAttributes">测试SessionAttributes</a><br>
    <a href="anno/getSessionAttributes">测试getSessionAttributes</a><br>
    <a href="anno/delSessionAttributes">测试delSessionAttributes</a><br>
    

    Controller:

    @Controller
    @RequestMapping(path = "/anno")
    @SessionAttributes(value = {"msg"})
    public class AnnoController {
    
        @RequestMapping(path="/testSessionAttributes")
        public String testSessionAttributes(Model model){
            System.out.println("testSessionAttributes方法执行了");
            //默认会将 msg 存入 request 域,当开启@SessionAttributes(value = {"msg"}),也会将 msg 存入 session
            model.addAttribute("msg", "haha");
            return "success";
        }
        @RequestMapping(path="/getSessionAttributes")
        public String getSessionAttributes(ModelMap model){
            System.out.println("getSessionAttributes方法执行了");
            String msg = (String) model.get("msg");
            System.out.println(msg);
            return "success";
        }
        @RequestMapping(path="/delSessionAttributes")
        public String delSessionAttributes(SessionStatus status){
            System.out.println("delSessionAttributes方法执行了");
            status.setComplete();
            return "success";
        }
    
    }
    

    成功页面:

    <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <h3>成功页面</h3>
        ${requestScope.msg}
        ${sessionScope.msg}
    </body>
    </html>
    
    

    在这里插入图片描述


8. RestController 注解

参考链接:https://blog.csdn.net/qq_45754346/article/details/124596138

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringMVC 从入门到精通系列 03 —— 常用注解 的相关文章

随机推荐

  • python逻辑判断

    1 if语句 info my name is xiaomu info list info split print info list if info list 0 xiaomu info list 0 dewei if info list
  • 【Matlab】二维图绘制及填色总结(basic)

    编程渣的艰难探索之Matlab绘图 个人需求 用matlab绘制多条曲线并在指定不规则区域填色 为什么一定要用Matlab呢 因为我觉得图形便于修改 看起来较为正规 代码量较少 1 同时绘制多条曲线 1 1 基本代码 真的很基础 x 0 0
  • redis在springboot中如何配置并启动

    在Spring Boot中配置和启动Redis非常简单 首先你需要安装Redis 然后添加一个Redis的配置文件 然后在Spring Boot的配置文件中添加相关的Redis配置信息 最后通过Spring Boot启动Redis即可
  • linux搭建FTP服务器步骤

    linux搭建FTP服务器 在linux操作系统中搭建ftp服务器 ftp服务器会提供三种远程登录方式 分别是匿名登录方式 本地用户方式和虚拟用户方式 这里我将把这三种搭建ftp服务器的操作步骤分享出来 供大家参考 一 匿名搭建 1 安装F
  • 22年字节跳动飞书人力套件二面面经

    前言 前文链接 https www hengy1 top article c956b8c6 html 简单介绍本次面试 波澜起伏吧 面试完自己心里没有啥底 24届本科菜鸡 没网上问的那么难 八股偏少 话不多说了直接来个复盘 二面 70min
  • logging模块学习

    logging 基础知识 logging的基础知识 logging basicConfig 参数介绍 filename 创建一个 FileHandler 使用指定的文件名 而不是使用 StreamHandler filemode 如果指明了
  • go socket编程

    8 1 Socket编程 在很多底层网络应用开发者的眼里一切编程都是Socket 话虽然有点夸张 但却也几乎如此了 现在的网络编程几乎都是用Socket来编程 你想过这些情景么 我们每天打开浏览器浏览网页时 浏览器进程怎么和Web服务器进行
  • kafka查询指定消费Group未消费的数据

    最近线上出现kafka生产者发送成功了 但是消费者没有拉取到 出现这种现象是偶发的 就是在几分钟内有几个消息没消费到 后面就没再出现过 首先先去卡夫卡上确认是否有消息堆积 下载kafka 不是src版的哦 http kafka apache
  • SQl CASE WHEN 语句的嵌套使用方式

    select id userid ys case when pj ys is NULL then case when pj ys1 is NUll then ys else pj ys1 end else pj ys end t from
  • 技巧分享篇---如何从GitHub上下载某个项目中单个文件的方法

    前言 梦想就是一种让你感到坚持就是幸福的东西 技巧分享篇 如何从GitHub上下载某个项目中单个文件的方法 一 Github项目里的单个js文件下载实例演示 1 点击查看文件 2 点击源码 Raw 3 通过 ctrl s 保存即可 二 Gi
  • Obsidian利用插件Remotely-save实现超低成本全平台云笔记

    Obsidian作为一个笔记软件 是目前最满足我需求的了 本地存储文件 Markdown格式作为基础 双链支持 以及好用的搜索等功能 基本实现了我对一款文字笔记软件的要求 但是Obsidian的收费价格确实不低 虽然软件本身的所有功能基本免
  • Visual Unit 简明教程

    载自 http www vckbase com index php wv 1270 VU1 0 简介 Visual Unit 简称VU 是新一代单元测试工具 功能强大 使用简单 完全可视化 不需编写测试代码 VU的测试结果使程序行为一目了然
  • UNIX系统被删文件的恢复策略

    与DOS Windows不同 UNIX文件被删除后很难恢复 这是由UNIX独特 的文件系统结构决定的 UNIX文件目录不像DOS Windows那样 文 件即使被删除之后仍保存有完整的文件名 文件长度 始簇号 即 文件占有的第一个磁盘块号
  • TTF、TOF、WOFF 和 WOFF2 的相关概念

    前言 在上一篇文章中 我引入了 TTF 格式的字体文件来解决各平台字体表现不统一的问题 但其实那不是最优解决方案 因为字体文件不止有 TTF 格式 常见的字体格式还有 OTF WOFF 和 WOFF2 等 今天 我来总结一下最常见字体格式的
  • Bootstarp学习教程(14) 其他相关组件(2)

    页面标题 简单的h1样式 可以适当地分出空间且分开页面中的章节 像其它组件一样 它可以使用h1的默认small元素 div class page header h1 Example page header h1 div
  • 【Web前端】彼岸の花——网上花店(网页制作)

    本篇博客我们来做一个好看又简单的前端案例 彼岸的花网页界面 这里是代码和网页素材 需要的自取 提取码 7777 https pan baidu com s 1PH0TCuLpapPlJnczDcGkig pwd 7777 at 166988
  • 面经获取

    分享下面文字和图片到朋友圈或者QQ空间 所有人可见 不能是小号 时间保留一天 或者发一个大于100人的群聊保留2分钟以上也行 但你如果发群里可能会被踢 提醒你一下 时间到了截图即可 面经整理不易 大家不要作弊啊 如果有父母啥的不能看 那么你
  • linux ssh出现Unable to negotiate with 192.168.1.1 port 22: no matching cipher found. Their offer......

    问题描述 linux ssh出现Unable to negotiate with 192 168 1 1 port 22 no matching cipher found Their offer aes128 cbc des cbc 解决办
  • VS2019安装配置QT插件(qt-vsaddin)

    1 介绍 Windows的Qt开发 一般采用Visual Studio安装Qt插件的方法开发Qt程序 毕竟VS开发工具还是比QtCreator开发工具强大 好用的多 本教程采用VS2019安装配置Qt插件 qt vsaddin msvc20
  • SpringMVC 从入门到精通系列 03 —— 常用注解

    文章目录 1 RequestParam 注解 2 RequestBody 注解 3 PathVariable 注解 4 RequestHeader 注解 了解 5 CookieValue 注解 了解 6 ModelAttribute 注解