“深入理解SpringMVC的注解驱动开发“

news2024/11/25 13:25:23

目录

  • 引言
    • 1. SpringMVC的常用注解
    • 2. SpringMVC的参数传递
    • 3. SpringMVC的返回值
    • 4. SpringMVC页面跳转
    • 总结

在这里插入图片描述

引言

在现代的Web开发中,SpringMVC已经成为了一个非常流行和强大的框架。它提供了许多注解来简化开发过程,使得我们能够更加专注于业务逻辑的实现。本文将深入探讨SpringMVC的注解驱动开发,重点关注常用注解、参数传递、返回值和页面跳转等方面。

1. SpringMVC的常用注解

1.1 @Controller
@Controller注解用于标识一个类是SpringMVC的控制器,它能够处理用户请求并返回相应的结果。我们可以通过在方法上使用@RequestMapping注解来指定请求的URL路径。
1.2 @RequestMapping
@RequestMapping注解用于将请求URL映射到相应的处理方法上。我们可以通过指定URL路径、请求方法、请求参数等来精确匹配请求。
1.3 @RequestParam
@RequestParam注解用于获取请求参数的值。我们可以通过指定参数名、是否必需、默认值等来获取请求中的参数值。
1.4 @PathVariable
@PathVariable注解用于获取URL路径中的参数值。我们可以通过在URL路径中使用占位符来指定参数名,并在方法参数中使用@PathVariable注解来获取参数值。
1.5 @ResponseBody
@ResponseBody注解用于将方法的返回值直接作为响应体返回给客户端。它可以将对象转换为JSON、XML等格式,并设置响应的Content-Type。
1.6.@RequestHeader

使用 @RequestHeader 注解可以获取指定的请求头信息。如果想要获取所有的请求头信息,可以使用 Map<String,String>、MultiValueMap<String,String>、HttpHeaders 这三个 Map 中的任何一个封装所有请求头的 name 和 value。

参数列表

参数说明
namename 和 value 互为别名,当只有一个参数时,可以省略 value,直接(“xxx”) 就可以了
valuename 和 value 互为别名,当只有一个参数时,可以省略 value,直接(“xxx”) 就可以了
required默认情况下,如果请求头中缺少了指定的 name,那么将会报错。
如果没有添加required = false,当请求头中没有这个zking请求头时就会报错。
defaultValue如果请求头中缺少了指定的 name ,那么会报错,可以使用 defaultValue 这个属性指定默认值,就可以避免报错 ;如果请求头缺少指定 name ,该属性设置的值将会作为默认值,如果该属性不设置值,它有自己的默认值 DEFAULT_NONE

2. SpringMVC的参数传递

2.1.基础类型+String

@RequestMapping("/h1")
    public String h1(String bname,Integer bid){
        log.info("基础类型+String传参:{},{}",bname,bid);
        return "index";
    }

2.2.复杂类型

    @RequestMapping("/h2")
    public String toHello2(Book book, HttpServletRequest req){
        log.info("复杂类型传参:{},{}", req.getParameter("bid"),req.getParameter("bname"));
        log.info("复杂类型传参:{}",book.toString());
        return "index";
    }

2.3.@RequestParam

  @RequestMapping("/h3")
    public String h3(@RequestParam Integer bid, @RequestParam(required = false) String bname){
        log.info(" 使用@RequestParam注解传递参数:{},{}", bid,bname);
        return "index";
    }

2.4.@PathVariable

    @RequestMapping("/h4/{bid}")
    public String h4(@PathVariable("bid") Integer bid){
        log.info(" 使用@PathVariable注解传递参数:{},", bid);
        return "index";
    }

2.5.@RequestBody

 //    能接受json数据,前提导入了Jackson依赖,没有导入Jackson依赖的话那进不了这个方法
    @RequestMapping("/h5")
        public String h5(@RequestBody Map map){
        log.info("RequestBody:map:{}",map);
        return "index";
    }

    //  不能接受json数据
    @RequestMapping("/h6")
    public String h6( Map map){
        log.info("RequestBody:map:{}",map);
        return "index";
    }

2.6.@RequestHeader

    @RequestMapping("/h7")
    public String h7(Book book, @RequestBody Map map, @RequestHeader("jwt") String jwt){
        log.info("book:{}",book);
        log.info("RequestBody:map:{}",map);
        log.info("RequestHeader:jwt:{}",jwt);
        return "index";
    }

3. SpringMVC的返回值

3.1 void返回

 public void f1(HttpServletResponse response) throws Exception {
        Map<String,Object> map = new HashMap<>();
        map.put("code",200);
        map.put("msg","成功");

        try {
        } catch (Exception e) {
            ResponseUtil.writeJson(response,map);
            e.printStackTrace();
        }
    }
   
@ResponseBody
@RequestMapping("/f2")
    public Map f2(HttpServletResponse resvponse) {
        Map<String,Object> map = new HashMap<>();
        map.put("code",200);
        map.put("msg","成功");

      return map;
    }

在这里插入图片描述

3.2 String返回

 @RequestMapping("/index")
    public String demo1(){
        System.out.println("hello  spring");
        return "index";
    }

3.3.String+Model返回

  @RequestMapping("/f3")
    public String f3(Model model, HttpServletRequest request){
        //填充模型数据
        model.addAttribute("name","张三");
        request.setAttribute("role","管理员");
        //逻辑视图名
        return "index";
    }
<%--
  Created by IntelliJ IDEA.
  User: yuanh
  Date: 2023/9/4
  Time: 17:04
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
hello word

name:${name}
role:${role}
</body>
</html>

在这里插入图片描述

3.4.ModelAndView

@RequestMapping("/f4")
    public ModelAndView f4(){
        ModelAndView mv = new ModelAndView();
        //填充模型数据
        mv.addObject("price","19.9");

        mv.setViewName("index");
        //逻辑视图名
        return mv;
    }

在这里插入图片描述

4. SpringMVC页面跳转

4.1 重定向

    @RequestMapping("/z3")
    public String z3(){
        System.out.println("z3");

        return "redirect:h1";
    }

    @RequestMapping("/z4")
    public String z4(){
        System.out.println("z4");
        return "redirect:/main/index";
    }

4.2 转发

	@RequestMapping("/z1")
    public String z1(){
        System.out.println("z1");

        return "forward:h1";
    }

    @RequestMapping("/z2")
    public String z2(){
        System.out.println("z2");
        return "forward:/main/index";
    }

总结

本文深入探讨了SpringMVC的注解驱动开发,重点关注了常用注解、参数传递、返回值和页面跳转等方面。通过学习和理解这些内容,我们可以更加灵活和高效地使用SpringMVC来开发Web应用程序。希望本文对您有所帮助!

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

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

相关文章

设置windos电脑开机自动启动chrome浏览器,并且打开指定网页

需求 web项目设置windos电脑开机自动启动chrome浏览器&#xff0c;打开指定网页地址&#xff0c;并设置为全屏显示 解决 使用windos的bat脚本&#xff0c;设置为开机自启动&#xff0c;代码如下 echo off cd /d %~dp0 title Chrome tasklist|find /i "chrome.exe"…

Hadoop的第二个核心组件:MapReduce框架第三节

Hadoop的第二个核心组件&#xff1a;MapReduce框架 九、MR程序运行的核心阶段的细节性知识1、MR程序在运行过程中&#xff0c;涉及到的阶段和作用2、MR程序运行的的第一个组件&#xff1a;InputFormat3、MR程序的Job提交流程的源码分析4、MR程序运行中Mapper组件的作用5、MR程序…

【IC设计】Chisel开发环境搭建

首先安装一个Ubuntu的虚拟机 然后给Ubuntu换个镜像&#xff0c;方便下载 注意换源后使用apt-get update更新下 安装vim&#xff08;可以不做&#xff09; 这里安装Vim是我感觉Ubuntu自带的vi编辑器似乎有问题&#xff0c;因为我按i进入【插入模式】并没有提示&#xff0c;所以…

气象监测设备中一般包括哪些设备?

气象监测设备是指用于测量和记录气象数据的设备&#xff0c;这些设备通常被安装在各种气象站上&#xff0c;用于监测对应的气象参数。 气象监测设备主要包括以下几种&#xff1a; 温湿度传感器&#xff1a;用于测量空气温度和湿度&#xff0c;是气象监测设备中的重要组成部分…

Linux命令200例:who用于显示当前登录到系统的用户信息

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0…

基于网络表示学习的 新闻推荐算法研究与系统实现

摘要 第1章绪论 新闻推荐通常是利用用户的阅读行为和习惯、阅读选择和爱好等信息,为 用户推荐新闻内容。新闻推荐能够减少用户在数量庞大数据信息中获取信息的 时间消耗,从而能够缓解“信息过载[7]”的难题。以文本为内容的新闻,和商品、 电影、短视频等推荐系统相比,新闻推…

vite搭建vue3项目

参考视频 1.使用npm搭建vite项目,会自动搭建vue3项目 npm create vitelatest yarn create vite2.手动搭建vue3项目 创建一个项目名称的文件夹执行命令&#xff1a;npm init -y 快速的创建一个默认的包信息安装vite: npm i vite -D -D开发环境的依赖 安装vue,现在默认是vue3.…

2023年最新 wechaty 框架开发微信机器人详细 API 教程说明(NodeJs 版本)

基本概述 wechaty 基础 在使用 wechaty 相关 api 之前&#xff0c;请大家先学习基础篇&#xff1a;如何使用 wechaty 框架开发微信机器人详细教程&#xff08;NodeJs 版本&#xff09; 设置 script 脚本执行 在 package.json 文件中&#xff0c;配置 "start": &qu…

OpenWrt的内核启动分析

u-boot从Flash分区中读取Linux内核到内存&#xff0c;然后跳转到内存&#xff08;某个地址&#xff09;执行Linux内核。Linux内核会进行一系列验证&#xff0c;根据设备树文件&#xff08;见下图openwrt/target/linux/realtek/dts-5.15/XXX.dts&#xff0c;&#xff09;注册相关…

gma 2 教程(二)数据操作:7.矢量数据操作简介

功能逻辑架构 gma矢量数据操作类主要包括数据资源&#xff08;DataSource&#xff09;、矢量图层&#xff08;Layer&#xff09;、矢量要素&#xff08;Feature&#xff09;&#xff08;与ogr一致&#xff0c;内部与ogr差异巨大&#xff09;&#xff0c;三者的示意图如下&#…

ctfshow-web-红包一

0x00 前言 CTF 加解密合集CTF Web合集网络安全知识库 文中工具皆可关注 皓月当空w 公众号 发送关键字 工具 获取 0x01 题目 0x02 Write Up 上来就丢了一个站&#xff0c;还有一个不怎么有用的图片。 按照常规流程&#xff0c;先扫目录&#xff0c;但是无果&#xff08;工具…

Java # Java基础八股

1、JVM、JRE、JDK之间的关系 个人理解&#xff1a;JVM可以帮助屏蔽底层的操作系统&#xff0c;使程序一次编译到处都可以运行&#xff0c;JVM可以运行class文件。JRE是java文件运行的环境&#xff0c;但不能新建程序&#xff0c;JRE包含JVM。JDK功能最齐全&#xff0c;包含了编…

基于TSINGSEE青犀视频AI智能技术的自然生态水源保护管理解决方案

一、方案背景 水是生命之源&#xff0c;日常生产生活离不开水。围绕全面深入打好打赢碧水保卫战&#xff0c;针对集中式饮用水源地等野外场景碎片化的特点&#xff0c;迫切需要建设数字智治、闭环管理、规范高效的水质监测体系&#xff0c;进一步加强水源地保护工作的开展落地…

腾讯云服务器优惠价格表(2023年最新版)

腾讯云作为国内领先的云服务提供商&#xff0c;提供了多种规格的云服务器&#xff0c;满足不同用户的需求&#xff0c;本文将详细介绍腾讯云服务器的优惠价格&#xff0c;并给出相应的购买建议。 腾讯云服务器提供了多种配置和多种购买时长选择&#xff0c;用户可以根据实际需求…

超震撼!全网疯传的第七届世界渲染大赛创意大盘点

第七届CG挑战赛TOP100新鲜出炉&#xff01;这是一场被圈内誉为“地表最强”、“全球最火”的世界渲染大赛&#xff0c;由拥有百万订阅的油管博主 pwnisher 发起。这次比赛的创作主题是《Boss Fight—终极决斗》&#xff0c;吸引了2880名创意大师和视觉艺术爱好者的参与。他们的…

【操作系统】聊聊页面置换算法

操作系统的缓存淘汰 操作系统一是提供的基础编程接口&#xff0c;二是实现软件治理的功能。但是因为内存是有限的&#xff0c;想要在有限的内存多存储数据&#xff0c;就利用段、页、段页方式进行数据的映射。但是内存存储有限&#xff0c;所以如何将内存中不用的数据进行及时…

【数据分享】2012-2022年1km分辨率全球夜间灯光时序数据(无需转发\免费获取)

夜间灯光数据是我们在各项研究中经常使用的数据&#xff01;在之前的文章中我们分享了来自NCEI国家环境信息中心的2012-2022年全球范围的逐年的NPP/VIIRS夜间灯光数据&#xff08;可查看之前推送的文章获悉详情&#xff09;&#xff01; 我们本次为大家分享的是来自中国农业大…

shell脚本学习积累

文章目录 创建shell脚本并运行条件测试基础shell脚本打包过去24小时内修改过的文件自动解压 bzip2, gzip 和 zip不同类型的压缩包打印一个rpm包的统计信息【含有输入参数】 创建shell脚本并运行 方式1&#xff1a; vim myshell.sh #文件开头是#!/bin/bash 或 #!/bin/sh sh mys…

小黑完成广播操比赛,荣获三等奖,回来晕车晚上弹琴的leetcode之旅:121. 买卖股票的最佳时机

小黑代码 class Solution:def maxProfit(self, prices: List[int]) -> int:# 数组长度n len(prices)# 最大利润profit 0# 中间变量min_ prices[0]# 遍历每一个数据作为买点for i in range(1, n):# 滚动获取最小值if prices[i] - min_ > profit:profit prices[i] - m…

无涯教程-JavaScript - BIN2HEX函数

描述 BIN2HEX函数将二进制数转换为十六进制。 语法 BIN2HEX (number, [places])争论 Argument描述Required/Optionalnumber 您要转换的二进制数。 数字不能超过10个字符(10位)。数字的最高有效位是符号位。其余的9位是幅度位。 负数使用二进制补码表示。 Requiredplaces 要…