Spring MVC相关注解运用 —— 上篇

目录

一、@Controller、@RequestMapping

1.1 示例程序

1.2 测试结果

二、@RequestParam

2.1 示例程序

2.2 测试结果

三、@RequestHeader、@CookieValue

3.1 示例程序

3.2 测试结果

四、@SessionAttributes

4.1 示例程序

4.2 测试结果

五、@ModelAttribute

5.1 示例程序

5.2 测试结果

往期专栏&文章相关导读 

1. Maven系列专栏文章

2. Mybatis系列专栏文章

3. Spring系列专栏文章

4. Spring MVC系列专栏文章 


一、@Controller、@RequestMapping

@Controller:作用:标记控制器,将控制器交给Spring容器管理。

                        位置:类上方

@RequestMapping:作用:给控制器方法设置请求路径
位置:方法或类上方。用于类上,表示类中的所有控制器方法都是以该地址作为父路径。
属性:

  1. value/path:请求路径
  2. method:指定请求方式
  3. params:规定必须发送的请求参数
  4. headers:规定请求必须包含的请求头

1.1 示例程序

package com.example.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;@Controller
@RequestMapping("/c3")
public class MyController3 {/*** 访问路径为 /c3/annotation1* 支持post和get请求* 请求时必须带有age参数* 请求时必须带有User-agent请求头* @param username* @return*/@RequestMapping(path = "/annotation1",method = {RequestMethod.GET,RequestMethod.POST},params = {"age"},headers = {"User-agent"})public String annotation1(String username){System.out.println("annotation1\t"+username);return "lyl-HQX";}
}

这里规定了请求参数必须带有age,但是下方方法参数列表没有age,那我们测试一下有age和无age。

1.2 测试结果

如果请求路径为:http://localhost:8080/c3/annotation1?age=10

测试结果为:

但是如果请求路径是: http://localhost:8080/c3/annotation1?username=10

 可以看到就报错,因此确实需要带age参数

因此请求路径应该写成这样:http://localhost:8080/c3/annotation1?username=10&age=10

可以看到确实打印出了用户名10。 

二、@RequestParam

作用:在控制器方法中获取请求参数
位置:方法参数前
属性:

  1. name:指定请求参数名称
  2. defaultValue: 为参数设置默认值
  3. required:设置是否是必须要传入的参数

2.1 示例程序

// 在控制器方法中获取请求参数@RequestMapping("/annotation2")public String annotation2(@RequestParam(name = "name",defaultValue = "HQX",required = false) String name){System.out.println("annotation2\t"+name);return "lyl-HQX";}

这个注解是修饰请求参数的相关属性,那我们有没有这个name属性应该都是可以的。

2.2 测试结果

当请求路径为:http://localhost:8080/c3/annotation2

 请求路径没有该参数了,该参数的默认值就是HQX,正常输出

当请求路径为:http://localhost:8080/c3/annotation2?name=LYL

 OK,当请求路径有该参数时,就按照请求路径的参数值来输出,可以看得到确实是测试成功了。 

三、@RequestHeader、@CookieValue

@RequestHeader

  • 作用:在控制器方法中获取请求头数据
  • 位置:方法参数前

@CookieValue

  • 作用:在控制器方法中获取Cookie数据
  • 位置:方法参数前

3.1 示例程序

/*** @RequestHeader* 作用:在控制器方法中获取请求头数据* 位置:方法参数前* @CookieValue* 作用:在控制器方法中获取Cookie数据* 位置:方法参数前*/// 获取User-Agent请求头和JSESSIONID的Cookie值@RequestMapping("/annotation3")public String annotation3(@RequestHeader("User-Agent")String userAgent, @CookieValue("JSESSIONID") String jSessionId){System.out.print("annotation3\t");System.out.println("userAgent: "+userAgent);System.out.print("jSessionId: " + jSessionId);return "lyl-HQX";}

3.2 测试结果

请求路径:http://localhost:8080/c3/annotation3

 可以看得到确实打印了请求头的相关数据:比如说windows系统,多少位,浏览器的版本等。sessionID也获取出来了。

四、@SessionAttributes

作用:将Model模型中的数据存到session域中
位置:类上方

4.1 示例程序

package com.example.controller;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;import javax.servlet.http.HttpSession;@Controller
@RequestMapping("/c4")
// 将Model模型中name的数据存到session域中
@SessionAttributes("name")
public class MyController4 {@RequestMapping("/t1")public String t1(Model model){// model1中保存name数据model.addAttribute("name","LYL");return "lyl-HQX";}@RequestMapping("/t2")public String t2(HttpSession session){// 从session中获取name数据System.out.println(session.getAttribute("name"));return "lyl-HQX";}
}

4.2 测试结果

OK,从上面程序我们可以知道,要先访问/t1,再访问/t2,才可以获取name的值。直接访问/t2是无法打印出name的属性值的。接下来我们测试一下:

当我们先访问/t2:​​​​​​:http://localhost:8080/c4/t2

OK,可以看到确实是打印出null,

并且浏览器也没有对应的值。

接下来访问/t1,http://localhost:8080/c4/t1

添加值之后

再访问/t2,可以看得到控制台确实打印出来了。 

 

五、@ModelAttribute

作用1:设置指定方法在控制器其他方法前执行
位置:方法上方

作用2:从Model模型中获取数据给参数赋值
位置:方法参数前

5.1 示例程序

作用一示例程序:

package com.example.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
@RequestMapping("/c5")
public class MyController5 {// @ModelAttribute作用1:设置指定方法在控制器其他方法前执行@ModelAttributepublic void before(){System.out.println("前置方法");}@RequestMapping("/t1")public String t1(){System.out.println("t1");return "lyl-HQX";}
}

 作用二示例程序:

package com.example.controller;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
@RequestMapping("/c5")
public class MyController5 {// @ModelAttribute作用1:设置指定方法在控制器其他方法前执行@ModelAttributepublic void before(Model model){System.out.println("前置方法");model.addAttribute("name","LYL");}@RequestMapping("/t1")public String t1(@ModelAttribute("name") String name){System.out.println(name);return "lyl-HQX";}
}

5.2 测试结果

作用一测试结果:http://localhost:8080/c5/t1

OK,可以看得到前置方法确实生效了。 

 作用二测试结果:http://localhost:8080/c5/t1

 OK,可以看到确实两个作用都成功执行了。

往期专栏&文章相关导读 

     大家如果对于本期内容有什么不了解的话也可以去看看往期的内容,下面列出了博主往期精心制作的Maven,Mybatis等专栏系列文章,走过路过不要错过哎!如果对您有所帮助的话就点点赞,收藏一下啪。其中Spring专栏有些正在更,所以无法查看,但是当博主全部更完之后就可以看啦。

1. Maven系列专栏文章

Maven系列专栏Maven工程开发
Maven聚合开发【实例详解---5555字】

2. Mybatis系列专栏文章

Mybatis系列专栏MyBatis入门配置
Mybatis入门案例【超详细】
MyBatis配置文件 —— 相关标签详解
Mybatis模糊查询——三种定义参数方法和聚合查询、主键回填
Mybatis动态SQL查询 --(附实战案例--8888个字--88质量分)
Mybatis分页查询——四种传参方式
Mybatis一级缓存和二级缓存(带测试方法)
Mybatis分解式查询
Mybatis关联查询【附实战案例】
MyBatis注解开发---实现增删查改和动态SQL
MyBatis注解开发---实现自定义映射关系和关联查询

3. Spring系列专栏文章

Spring系列专栏Spring IOC 入门简介【自定义容器实例】
IOC使用Spring实现附实例详解
Spring IOC之对象的创建方式、策略及销毁时机和生命周期且获取方式
Spring DI简介及依赖注入方式和依赖注入类型
Spring IOC相关注解运用——上篇
Spring IOC相关注解运用——下篇
Spring AOP简介及相关案例
注解、原生Spring、SchemaBased三种方式实现AOP【附详细案例】
Spring事务简介及相关案例
Spring 事务管理方案和事务管理器及事务控制的API
Spring 事务的相关配置、传播行为、隔离级别及注解配置声明式事务

4. Spring MVC系列专栏文章 

SpringMVC系列专栏Spring MVC简介附入门案例
Spring MVC各种参数获取及获取方式自定义类型转换器和编码过滤器
Spring MVC获取参数和自定义参数类型转换器及编码过滤器
Spring MVC处理响应附案例详解
Spring MVC相关注解运用 —— 上篇

Spring MVC相关注解运用 —— 中篇

Spring MVC相关注解运用 —— 下篇
Spring MVC多种情况下的文件上传
Spring MVC异步上传、跨服务器上传和文件下载
Spring MVC异常处理【单个控制异常处理器、全局异常处理器、自定义异常处理器】
Spring MVC拦截器和跨域请求
SSM整合案例【C站讲解最详细流程的案例】

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

A核与M核异构通信过程解析

现在越来越多的产品具有M core和A core的异构架构,既能达到M核的实时要求,又能满足A核的生态和算力。比如NXP的i.MX8系列、瑞萨的RZ/G2L系列以及TI的AM62x系列等等。虽然这些处理器的品牌及性能有所不同,但多核通信原理基本一致,都…

Spring Boot中的SimpMessagingTemplate是什么,原理,以及如何使用

Spring Boot中的SimpMessagingTemplate是什么,原理,以及如何使用 SimpMessagingTemplate是Spring Framework中的一个类,用于向WebSocket客户端发送消息。在Spring Boot应用程序中,可以使用SimpMessagingTemplate来实现WebSocket通…

OpenCV 学习笔记(C++)(1.4W字)

一切图像皆Mat OpenCV中图像对象的创建与复制 Mat基本结构 Mat对象数据组成:头部和数据部分,头部存储图像的属性(大小、宽高、图像类型:浮点数类型、字节类型、16位整型、32位整型、双精度浮点型,通道数量和获取途径…

【微服务】什么是微服务?-- 全面了解微服务架构

What is Microservices — Edureka 您有没有想过,什么是微服务以及扩展行业如何与它们集成,同时构建应用程序以满足客户的期望? 要了解什么是微服务,您必须了解如何将单体应用程序分解为独立打包和部署的小型微型应用程序。本文将…

在windows server上用Mosquitto软件创建MQTT服务器

今天下午捣鼓了半天,在云服务器上面创建了个MQTT服务器,然后用MQTTX软件进行了测试。过程记录如下: 1、下载mosquitto软件,链接如下图: 2、下载完成后安装,一直点下一步下一步就好了。 3、在安装路径下&am…

CHATGPT使用笔记

CHATGPT是帮你做事,而不是替你做事 1、联网插件: 使用Webpilot插件联网时还可以同时使用其它两种插件(一次可以同时使用三个插件),而使用Web Browsing插件功能联网时无法使用插件功能(联网功能和插件只能…

Celery分布式异步框架

Celery异步任务框架 """ 1)可以不依赖任何服务器,通过自身命令,启动服务(内部支持socket) 2)celery服务为为其他项目服务提供异步解决任务需求的 注:会有两个服务同时运行,一个是项目服务&a…

基于SpringCloud微服务流动资金贷款业务系统设计与实现

一、引言 由于传统的贷款业务系统并不能够顺应时代的变化,同时在一定程度上对业务发展进行了限制,所以为了适应时代的发展,信息贷款业务应该能够被产品化、丰富化,同时还需要制定一套特定的流程来满足新时代用户的需求。流程化的规范管理是当今银行业务发展的必然趋势,研究并开…

Linux--获取一长串目录的结构指令:tree

注意:这个tree指令不是Linux自带的,需要下载 yum install -y tree (-y的作用是免确定) 示例:

风景类Midjourney prompt提示词

稳定输出优美风景壁纸的Midjourney prompt提示词。 1\在夏夜,有淡蓝色的星空,海边,流星,烟花,海滩上全是蓝色的玫瑰和绿色的植物,由Ivan Aivazovsky和Dan Mumford,趋势在cgsociety,…

CSS差缺补漏之《高频面试题----如何使元素水平垂直居中?》

面试中经常会被问到如何使元素水平垂直居中,有哪些方法可以做到? 针对此问题,特意总结如下~ 方法一: 定位(主要是值子绝父相)与margin负值配合----依赖于子元素宽/高 (使用绝对定位或固定定位后&#xff0c…

【C/C++】深拷贝与浅拷贝

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…