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

news2025/1/11 11:53:48

目录

一、@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:设置指定方法在控制器其他方法前执行
    @ModelAttribute
    public 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:设置指定方法在控制器其他方法前执行
    @ModelAttribute
    public 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.coloradmin.cn/o/705640.html

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

相关文章

4G/wifi/lora投入式无线液位传感变送器 mqtt/http协议对接云平台

1.产品概述 DAQ-GP-TLL4G无线液位传感器终端是上海数采物联网科技有限公司推出的一款无线液体水位测量产品。原理是利用扩散硅片上的一个惠斯通电桥,被测介质(气体或液体)施压使桥壁电阻值发生变化(压阻效应)&#xff…

A_B_C滑块

分享一个有意思的滑块。 网址:https://xxgs.chinanpo.mca.gov.cn/gsxt/newList 图片好看,不知道说啥了,验证部分。 ok,源码在这,自提。 # -*- coding:utf-8 -*- # author: qinshaowen # V:15702312233 import requests,base64 import execjs,ddddocr from loguru impo…

Springboot 集成Prometheus 数据采集 使用grafana 监控报告告警 邮件配置

目录 Springboot 相关 Pom 重点包 如果有需要可以增加安全包-一般内部机房没啥事-(非必选) Application.yml配置文件-(非必选) Application.properties management.endpoints.web.exposure.include介绍 启动类 查看监控信…

[RocketMQ] Producer发送单向/异步/同步消息源码 (八)

文章目录 1.sendMessage方法发送消息2.invokeOneway单向发送2.1 invokeOnewayImpl单向调用 3.sendMessageSync同步发送3.1 invokeSync同步调用3.1.1 invokeSyncImpl同步调用实现3.1.2 processSendResponse处理响应结果 4.sendMessageAsync异步发送消息4.1 invokeAsync异步调用4…

信号链噪声分析16

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示:这里可以添加技术概要 上世纪 50、60 年代,积分非线性度、差分非线性度、单调性、无失码、增益误差、 失调误差、漂移等直流性能规格主要用于表示数据转换器的性能特性。在当时&#xff0…

【企业架构框架】SOGAF 运营模式

Salesforce 运营、治理和架构框架 (SOGAF) 将 MIT-CISR 企业架构框架应用于 Salesforce 实施和程序。 介绍 运营模式有两个维度:业务流程标准化和业务流程集成。业务流程和相关系统的标准化意味着准确定义流程的执行方式。运营模式可提高整个公司的效率和可预测性。…

网络通讯录服务器

文章目录 六、通讯录4.0实现---⽹络版1. 环境搭建1.1 安装Httplib库1.1升级 gcc 2. 搭建简单的服务器3. 约定双端交互接⼝4. 代码实现客户端5. 代码实现服务端 六、通讯录4.0实现—⽹络版 简易版本 服务端完整版本 客户端完整版本 Protobuf还常⽤于通讯协议、服务端数据交换…

【物联网无线通信技术】802.11无线安全认证

本文由简入繁介绍了IEEE802.11i无线局域网安全技术的前世今生,帮助路由器开发者对WLAN的加密安全策略有一个概念上的认知,能够更好地分析STA掉线以及漫游等问题。 目录 WEP WPA WPA/WPA2-PSK认证过程 802.11i WEP WEP是Wired Equivalent Privacy的简…

基于matlab使用扩张卷积的语义分割(附源码)

一、前言 使用扩张卷积训练语义分割网络。语义分割网络对图像中的每个像素进行分类,从而生成按类分割的图像。语义分割的应用包括自动驾驶的道路分割和医疗诊断的癌细胞分割。 二、加载训练数据 该示例使用 32 x 32 个三角形图像的简单数据集进行说明。数据集包括…

Quiz 14_2-2: Using Web Services | Python for Everybody 配套练习_解题记录

文章目录 Python for Everybody课程简介Quiz 14_2-2: Using Web Services单选题(1-15)操作题Autograder 1: Extract Data from JSONAutograder 2: Calling a JSON API Python for Everybody 课程简介 Python for Everybody 零基础程序设计(P…

12 | 领域建模:如何用事件风暴构建领域模型?

还记得微服务设计为什么要选择 DDD 吗? 其中有一个非常重要的原因,就是采用 DDD 方法建立的领域模型,可以清晰地划分微服务的逻辑边界和物理边界。可以说,在 DDD 的实践中,好的领域模型直接关乎微服务的设计水平。因此…

代码随想录算法训练营第4天| 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II

今日学习的文章链接,或者视频链接 第二章 链表part02 自己看到题目的第一想法 看完代码随想录之后的想法 24: 注意链表的操作: class Solution { public:ListNode* swapPairs(ListNode* head) {auto dummyhead new ListNode(0,head);auto prev …

Apache Doris (五) :Doris分布式部署(二) FE扩缩容

目录 1. 通过MySQL客户端连接Doris ​​​​​​​​​​​​​​2. FE Follower扩缩容 ​​​​​​​3. FE Observer 扩缩容 ​​​​​​​​​​​​​​4. FE扩缩容注意点 进入正文之前,欢迎订阅专题、对博文点赞、评论、收藏,关注IT贫道&#…

超详细|粒子群优化算法及其MATLAB实现

本文主要介绍粒子群算法的背景与理论,并结合对应部分的MATLAB程序对其实现流程做了阐述,代码获取方式见文末。 00 文章目录 1 粒子群优化算法 2 问题导入 3 MATLAB程序实现 4 改进策略 5 展望 01 粒子群优化算法 1.1 粒子群优化算法背景 近年来&…

亿发软件:智慧中药房信息化建设,中医药安全煎煮解决方案

传统的中药饮片煎煮服用较为繁琐,局限了诸多人群的使用。为了优化医疗服务,并满足患者不断增长的中医药需求,智慧中药房的概念应运而生。智慧化中药房通过信息化和自动化相结合,旨在提高中药处方的管理和效率。下面就让我们了解一下中药配方颗…

创建一个nuxt项目

yarn create nuxt-app ssr 启动项目 如果使用npm run start 可能会报错,提示需要配置为开发环境 可以先执行npm run dev 看看

HPM6750系列--第三篇 搭建MACOS编译和调试环境

一、目的 在上一篇《HPM6750系列--第二篇 搭建Ubuntu开发环境》我们介绍了Ubuntu上开发HPM6750,本篇主要介绍MAC系统上的开发环境的搭建过程,整个过程和Ubuntu上基本类似。 二、准备 首先我们在Mac电脑上打开一个terminal,然后创建一个…

苹果Vision Pro手势+眼球融合交互的奥秘

毫无疑问,Vision Pro在眼球追踪手势的融合交互体验上,给AR/VR头戴设备带来了新突破,在用户体验上的提升非常明显。 ​那么,为什么Vision Pro上这一功能会被如此值得关注呢?为了弄清楚,我们先来看看主流VR设…

037:mapboxGL输入经纬度,地址坐标转换,弹出位置点地址信息

第037个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中输入经纬度,地址坐标转换,弹出位置点地址信息. 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共158行)相关API参考:专栏目标示例效果 配置方式…

配置Jenkins slave agent(通过jnlp)方式连接

上一章,使用ssh的方式添加了两个agent,并都成功完成了构建任务,这一章使用jnlp的方式配置agent,jnlp方式配置agent有个好处,就是agent是主动去找到Master请求连接的,master->agent的通道可以配置一个age…