@RequestParam、@PathVariable、@RequestBody、@ResponseBody注解辨析

2023-11-14

@RequestParam

@RequestParam:将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)
例如:defaultValue为给name设定默认值,@RequestParam中的value值必须跟http://localhost:8080/hello/show18?name=998?后的参数名对应上

@RequestMapping("show18")
    public ModelAndView test18(@RequestParam(value="name",required=true,defaultValue="hello")String name){
        ModelAndView mv = new ModelAndView();
        mv.setViewName("hello2");
        mv.addObject("msg", "接收普通请求参数:" + name);
        return mv;
    }

@PathVariable

@PathVariable是spring3.0的一个新功能:接收请求路径中占位符的值

@PathVariable("xxx")
通过 @PathVariable 可以将URL中占位符参数{xxx}绑定到处理器类的方法形参中@PathVariable(“xxx“) 

例如对于如下代码:

@RequestMapping("show5/{id}/{name}")
    public ModelAndView test5(@PathVariable("id") Long ids ,@PathVariable("name") String names){
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","占位符映射:id:"+ids+";name:"+names);
        mv.setViewName("hello2");
        return mv;
    }

当我们给定请求路径为http://localhost:8080/hello/show5/1/james时,经过@PathVariable修饰的参数idsnames,会分别被赋值为1james

@RequestBody

  • 该注解用于读取 Request 请求的 body 部分数据,使用系统默认配置的 HttpMessageConverter 进行解析,然后把相应的数据绑定到要返回的对象上;
  • 再把 HttpMessageConverter 返回的对象数据绑定到 controller 中方法的参数上。
    具象的说,就是将前台返回的数据,封装到@RequestBody注解修饰的相应类中,如下所示代码,返回的数据封装到Brand类
@PostMapping(value = "/search")
    public Result<List<Brand>> findList(@RequestBody Brand brand){
        List<Brand> brands=brandService.findList(brand);
        return new Result<List<Brand>>(true,StatusCode.OK,"条件搜索查询成功",brands);
    }

使用时机:

GET、POST方式提交 : 根据 request header Content-Type 的值来判断:
application/x-www-form-urlencoded可选(即非必须,因为这种情况的数据 @RequestParam, @ModelAttribute 也可以处理,当然@RequestBody也能处理);
multipart/form-data不能处理(即使用@RequestBody不能处理这种格式的数据);
其他格式必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理);
PUT 方式提交 : 根据request header Content-Type的值来判断:
application/x-www-form-urlencoded必须
multipart/form-data不能处理
其他格式必须

@ResponseBody

  • 该注解用于将 Controller 的方法返回的对象,通过适当的 HttpMessageConverter 转换为指定格式后,写入到 HTTP 中的 Response 对象的body 数据区。然后可以在前台页面时显示这些信息。

注意

  • 在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
  • @ResponseBody是作用在方法上的,@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中,一般在异步获取数据时使用【也就是AJAX】。

使用时机

返回的数据不是html标签的页面,而是其他格式数据,比如json、xml等。

参考链接

https://www.jianshu.com/p/64b22da6c9ab

https://blog.csdn.net/originations/article/details/89492884

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

@RequestParam、@PathVariable、@RequestBody、@ResponseBody注解辨析 的相关文章

  • 通过 InjectMocks Spy 注入对象

    我需要对一个类运行一系列单元测试 该类具有 Autowired Logger 实现 实现的基本思想是 Mock Logger logger InjectMocks TestedClass tested 但我想保存日志输出功能 Mockito
  • 有没有好的方法来解析用户代理字符串?

    我有一个Java接收模块User Agent来自最终用户浏览器的字符串的行为需要略有不同 具体取决于浏览器类型 浏览器版本甚至操作系统 例如 FireFox 7 0 Win7 Safari 3 2 iOS9 我明白了User Agent由于
  • JavaScript:参数列表后缺少 )

    这个 JavaScript 产生一个错误 参数列表后缺少 在 firebug 中使用代码 我究竟做错了什么 功能d缺少左括号 answer after 不应该逃避 只需常规报价即可
  • Java 泛型/类型调度问题

    考虑以下程序 import java util List import java util ArrayList public class TypeTest public static class TypeTestA extends Type
  • Java:从元素创建 DOM 元素,而不是文档

    如您所知 在 Java 中创建 Dom 元素的正确方法是执行以下操作 import org w3c dom Document import org w3c dom Element Document d Element e e d creat
  • 如何将 Spotlight for Help 插入本地化的 macOS 应用程序?

    我正在 macOS 上使用 Swing GUI 框架实现 Java 应用程序 当使用system外观和感觉以及screen菜单栏 Swing 自动插入一个搜索栏 called 聚光灯寻求帮助 https developer apple co
  • 服务器到 Firebase HTTP POST 结果为响应消息 200

    使用 Java 代码 向下滚动查看 我使用 FCM 向我的 Android 发送通知消息 当提供正确的服务器密钥令牌时 我收到如下所示的响应消息 之后从 FCM 收到以下响应消息 Response 200 Success Message m
  • spring - 强制 @Autowired 字段的 cglib 代理

    我有混合堆栈 EJB 和 Spring 为了将 Spring 自动装配到 EJB 我使用SpringBeanAutowiringInterceptor 不确定这是否会影响我遇到的问题 在尝试通过以下方式自动装配 bean 时 Scope p
  • Java替换特定字符

    这是我在这个网站上的第一个问题 所以我会尽量不要成为一个十足的菜鸟 我目前正在用java 创建刽子手游戏 所以我问你的问题是我们是否被赋予了 幽灵 这个词 并将 Ghost 替换为 hiddenWord ghost length for i
  • 想要开发像 Facebook 这样的网站 - 处理数百万个请求 - 高性能 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想用 Java 开发一个像 Fac
  • 在 Spring Context 加载实际的 Spring Bean 之前是否模拟了模拟 bean (@MockBean)?

    让我们以下面的例子为例 Autowired MockBean private Foo foobar Spring Context 是否加载类Foo首先 然后应用模拟 或者是 Mockbean以某种方式被检测到 Spring 创建并应用模拟而
  • Java:VM 如何在 32 位处理器上处理 64 位“long”

    JVM 如何在 32 位处理器上处理 64 位的原始 long 在多核 32 位机器上可以并行利用多个核心吗 64 位操作在 32 位机器上慢了多少 它可能使用多个核心来运行不同的线程 但不会并行使用它们进行 64 位计算 64 位长基本上
  • 尝试在没有 GatewayIntent 的情况下访问消息内容

    我希望每当我写一条打招呼的消息时 机器人都会在控制台中响应一条消息 但它只是给我一个错误 JDA MainWS ReadThread WARN JDA Attempting to access message content without
  • Install4j:如何在安装结束时执行命令行 java -jar filename.jar

    在 Intall4j 中 在安装结束时 我只想通过执行如下命令行来初始化某些内容 java jar filename jar 我怎样才能归档这个任务install4j Thanks 将 运行可执行文件或批处理文件 操作添加到 安装屏幕 并设
  • XMLHttpRequest 上传进度事件在 Firefox 10.0.2 中不起作用

    我正在尝试创建一个带有进度条的基于ajax 的上传表单 这是我的代码 其中的上传部分 xhr new XMLHttpRequest xhr upload addEventListener progress function e if e l
  • 让JScrollPane控制多个组件

    对于我的应用程序 我正在设计一个脚本编辑器 目前我有一个JPanel其中包含另一个JPanel保存行号 位于左侧 以及JTextArea用于允许用户输入代码 位于右侧 目前 我已经实施了JScrollPane on the JTextAre
  • struts 教程或示例

    我正在尝试在 Struts 中制作一个登录页面 这个想法是验证用户是否存在等 然后如果有错误 则返回到登录页面 错误显示为红色 典型的登录或任何表单页面验证 我想知道是否有人知道 Struts 中的错误管理教程 我正在专门寻找有关的教程 或
  • 从一个文本文件中获取数据并将其移动到新的文本文件

    我有一个文件 里面有数据 在我的主要方法中 我读入文件并关闭文件 我调用另一种方法 在原始文件的同一文件夹内创建一个新文件 所以现在我有两个文件 原始文件和通过我调用的方法生成的文件 我需要另一种方法 从原始文件中获取数据并将其写入创建的新
  • 为什么 BufferedWriter 不写入文件?

    我有这个代码 String strings Hi You He They Tetrabenzene Caaorine Calorine File file new File G words txt FileWriter fWriter Bu
  • 使用 eclipse IDE 配置 angularjs

    我想开始使用 AngularJs 和 Java Spring 进行开发 我使用 Eclipse 作为 IDE 我想配置我的 Eclipse 以使这些框架无缝工作 我知道我可能要求太多 但相信我 我已经做了很多研究 你们是我最后的选择 任何帮

随机推荐

  • 敏捷宣言以及敏捷开发的特点

    敏捷宣言 敏捷宣言 也叫做敏捷软件开发宣言 正式宣布了对四种核心价值和十二条原则 可以指导迭代的以人为中心的软件开发方法 敏捷宣言强调的敏捷软件开发的四个核心价值是 个体和互动高于流程和工具 工作的软件高于详尽的文档 客户合作高于合同谈判
  • Go_流程、跳转控制语详解

    流程控制语句分类 流程控制语句可以控制代码的执行顺序和条件 顺序结构 普通的代码 由上而下依次执行 分支结构 if switch 循环结构 for if语句 条件表达式值必须是bool类型 不可省略括号 且左大括号不能另起一行 格式1 if
  • AI绘图Midjourney手把手教程

    以下是使用Midjourney AI绘画程序的注册和入门指南 Midjourney是一款功能强大的绘图软件 通过输入一段图片的文字描述即可生成精美的绘画 我们将为您提供详细的操作步骤 让您轻松上手 下面是使用Midjourney AI绘画程
  • Android绘制笔记——Color、Shader

    Android 颜色Color 1 颜色 1 十六进制ARGB颜色值表示 Int color 0xFFFF0000 红色 2 Color类常量 本质为十六进制表示 Int color Color RED 红色 ColorInt public
  • ffmpeg-android dlopen failed: library “libclang_rt.ubsan_standalone-aarch64-android.so“ not found

    NDK编译的ffmpeg 库 在android上使用 提示动态库错误 15 08 54 276 18357 18357 E AndroidRuntime java lang UnsatisfiedLinkError dlopen faile
  • 报时机器人的rasa shell执行流程分析

    本文以报时机器人为载体 介绍了报时机器人的对话能力范围 配置文件功能和训练和运行命令 重点介绍了rasa shell命令启动后的程序执行过程 一 报时机器人项目结构 1 对话能力范围 1 能够识别欢迎语意图 greet 和拜拜意图 good
  • Linux 或者 Docker 容器通过 date 设置系统时间

    目录 1 Linux 2 Docker 容器 2 1 进入容器内部修改 2 2 可能会遇到的问题 1 Linux 要在Linux系统中设置日期和时间 可以使用date命令 使用以下命令格式来设置日期和时间 sudo date s YYYY
  • kubernetes二进制单节点和多节点部署(多节点+dashbord)

    kubernetes二进制单节点和多节点部署 多节点 dashbord kubernetes单节点部署 环境准备 在 master01 节点上操作 上传 master zip 和 k8s cert sh 到 opt k8s 目录中 解压 m
  • YOLOv5 Focus C3 各模块详解及代码实现

    目录 yolov5s yaml yolov5s yaml基本参数含义 一些基本参数 BackBone Head Focus 一 Focus模块的作用 Focus的参数量 Yolov3和Yolov5的改进对比 关于Focus的补充 网络结构图
  • 轻量级人像分割深度学习模型PP-HumanSeg树莓派部署

    人像分割是图像分割领域的高频应用 PaddleSeg推出在大规模人像数据上训练的人像分割系列模型PP HumanSeg 包括超轻量级模型PP HumanSeg Lite 满足在服务端 移动端 Web端多种使用场景的需求 本项目将PP Hum
  • Ceph分布式存储详解

    一 Ceph概述 1 存储发展史 企业中使用存储按照其功能 使用场景 一直在持续发展和迭代 大体上可以分为四个阶段 DAS Direct Attached Storage 即直连存储 第一代存储系统 通过SCSI总线扩展至一个外部的存储 磁
  • ChatGPT泄露用户聊天记录标题;Adobe加入AIGC战局;阿里大模型前带头人杨红霞加盟字节跳动丨每日大事件...

    数据智能产业创新服务媒体 聚焦数智 改变商业 企业动态 诸葛智能推出 诸葛CDP 2 0 等三大产品升级 3月22日 容联云旗下场景化数据智能服务商 诸葛智能 举办2023春季发布会 推出客户数据管理平台 诸葛CDP 2 0 一站式用户行为
  • freemarker动态生成word和pdf

    1 使用freemarker生成word freemarker生成word的方法网上有很多 比较简单 基本上都差不多 所需工具 freemarker
  • Python爬虫之Js逆向案例(3)-X品牌手机社区

    声明 XX手机社区加密逆向分析仅用于研究和学习 这篇文章的学习内容是以XX手机社区为案例 对JS逆向的整个过程进行详细分析 下面会进行以下几步进行分析 下方演示过程全部使用chrome浏览器 锁定关键接口 锁定关键字段 破解关键字段 pyt
  • (Java)leetcode-4 Median of Two Sorted Arrays(寻找两个正序数组的中位数)

    题目描述 给定两个大小为 m 和 n 的正序 从小到大 数组 nums1 和 nums2 请你找出这两个正序数组的中位数 并且要求算法的时间复杂度为 O log m n 你可以假设 nums1 和 nums2 不会同时为空 示例 1 num
  • 三步实现Android任意控件悬浮效果

    Tag 项目介绍 之前做项目的时候实现的一个悬浮效果 如图 可能不够清晰 接下来就是实现效果 如图所示 demo直接用的截图 原理很简单 用RecyclerView addHeaderView的方式实现 实现步骤 1 添加依赖 compil
  • 树莓派——linux内核与驱动

    文章目录 Linux内核基础框架 内核结构框图 linux系统架构 shell 驱动 为什么要学习写驱动 什么是驱动 硬件设备分类 文件名与设备号 驱动结构框图的认知 内核的 sys open sys read 会做什么 驱动程序开发步骤
  • 过采样和欠采样

    一 采样定理 只要采样频率高于信号最高频率的两倍 就可以从采样信号中恢复出原始信号 二 过采样和欠采样 1 采样频率高于信号最高频率的两倍 这种采样被称为过采样 2 采样频率低于信号最高频率的两倍 这种采样被称为欠采样 三 基带信号和频带信
  • 计算机网络知识点汇总

    主要内容 基本概念 物理层 数据链路层 网络层 传输层 应用层 一 基本概念 计算机网络 按照某种协议进行数据通信 实现硬件资源和软件资源的共享 分类 分布范围 使用者 交换技术 拓扑结构 传输技术 计算机网络的体系结构 ISO OSI参考
  • @RequestParam、@PathVariable、@RequestBody、@ResponseBody注解辨析

    RequestParam RequestParam 将请求参数绑定到你控制器的方法参数上 是springmvc中接收普通参数的注解 例如 defaultValue为给name设定默认值 RequestParam中的value值必须跟http