SpringMVC ---- HttpMessageConverter

news2025/1/4 17:38:23

SpringMVC ---- HttpMessageConverter

  • 1. @RequestBody
  • 2. RequestEntity
  • 3. @ResponseBody
  • 4. SpringMVC处理json
  • 5. SpringMVC处理ajax
  • 6. @RestController注解
  • 7. ResponseEntity

HttpMessageConverter,报文信息转换器,将请求报文转换为 Java 对象,或将 Java 对象转换为响应报文 HttpMessageConverter 提供了两个注解和类型:@RequestBody,@ResponseBody,RequestEntity,ResponseEntity

1. @RequestBody

@RequestBody 可以获取请求体,需要在控制器方法设置一个形参,使用 @RequestBody 进行标识,当前请求的请求体就会为当前注解所标识的形参赋值

    @RequestMapping("/testRequestBody")
    public String testRequestBody(@RequestBody String requestBody){
        System.out.println("requestBody: " + requestBody);
        return "success";
    }
<form th:action="@{/testRequestBody}" method="post">
    <input type="text" name="username"><br>
    <input type="password" name="password"><br>
    <input type="submit" value="测试@RequestBody"><br>
</form>

输出结果:

requestBody:username=admin&password=123456

在这里插入图片描述

2. RequestEntity

RequestEntity 封装请求报文的一种类型,需要在控制器方法的形参中设置该类型的形参,当前请求的请求报文就会赋值给该形参,可以通过 getHeaders() 获取请求头信息,通过 getBody() 获取请求体信息

    @RequestMapping("/testRequestEntity")
    public String testRequestEntity(RequestEntity<String> requestEntity){
        System.out.println("requestHeader:"+requestEntity.getHeaders());
        System.out.println("requestBody:"+requestEntity.getBody());
        return "success";
    }
<form th:action="@{/testRequestEntity}" method="post">
    <input type="text" name="username"><br>
    <input type="password" name="password"><br>
    <input type="submit" value="测试RequestEntity"><br>
</form>

在这里插入图片描述

3. @ResponseBody

@ResponseBody 用于标识一个控制器方法,可以将该方法的返回值直接作为响应报文的响应体响应到浏览器(而不是跳转页面)

    @RequestMapping("/testResponseBody")
    @ResponseBody
    public String testResponseBody(){
        return "success";
    }

结果:页面显示 success

4. SpringMVC处理json

@ResponseBody 处理 json 的步骤:
a>导入 jackson 的依赖

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.12.1</version>
</dependency>

b>在 SpringMVC 的核心配置文件中开启 mvc 的注解驱动,此时在 HandlerAdaptor 中会自动装配一个消息转换器:MappingJackson
HttpMessageConverter,可以将响应到浏览器的 Java 对象转换为 Json 格式的字符串

    <mvc:annotation-driven></mvc:annotation-driven>

c>在处理器方法上使用 @ResponseBody 注解进行标识
d>将 Java 对象直接作为控制器方法的返回值返回,就会自动转换为 Json 格式的字符串

    @RequestMapping("/testResponseUser")
    @ResponseBody
    public User testResponseUser(){
        return new  User("1001", "admin", "123456", 23, "男");
    }

浏览器的页面中展示的结果:
{“id”:“1001”,“name”:“admin”,“password(排除文章风险)”:“123456”,“age”:23,“sex”:“男”}
在这里插入图片描述

5. SpringMVC处理ajax

a>请求超链接

<div id="app">
    <a @click="testAjax" th:href="@{/testAjax}">测试Ajax</a>
</div>

b>通过 vue 和 axios 处理点击事件

<script type="text/javascript" th:src="@{/static/js/vue.js}"></script>
<script type="text/javascript" th:src="@{/static/js/axios.min.js}"></script>
<script type="text/javascript">
    var vue = new Vue({
        el:"#app",
        methods:{
            testAjax:function (event) {
                axios({
                    method:"post",
                    url:event.target.href,
                    params:{
                        username:"admin",
                        password:"123456"
                    }
                }).then(function (response) {
                    alert(response.data);
                });
                event.preventDefault();
            }
        }
    });
</script>

c>控制器方法

    @RequestMapping("/testAjax")
    @ResponseBody
    public String testAjax(String username, String password){
        System.out.println("username : " + username + ", password : " + password);
        return "hello,ajax";
    }

6. @RestController注解

@RestController 注解是 springMVC 提供的一个复合注解,标识在控制器的类上,就相当于为类添加了 @Controller 注解,并且为其中的每个方法添加了 @ResponseBody 注解

7. ResponseEntity

ResponseEntity 用于控制器方法的返回值类型,该控制器方法的返回值是响应到浏览器的响应报文

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

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

相关文章

[牛客top101]详解01,02,反转链表问题

文章目录前言1. 整体翻转链表1.1 题目描述1.2 题目详解2. 翻转链表的部分区间2.1 题目描述2.2 题目详解3. 完整代码展示前言 从本章开始,我们就开始刷题旅程啦,路上必定问题多多,但还是得练呐!所以,就现在,开始啦! 1. 整体翻转链表 1.1 题目描述 给定一个单链表的头结点pHea…

(续)SSM整合之springmvc笔记(拦截器)(P164-168)

目录 一 准备工作 1. 创建spring_mvc_extension com.atguigu 2 .导入依赖 3. 添加web模块 4 .web.xml 5 . springmvc.xml 6 index.html 7 控制层 8 success.html 9 .添加到tomcat ​10 测试 二 . 测试拦截器 1 . index.html 2 . FirstInterceptor …

Docker概念及安装

一、Docker概述 1 IT架构的演进&#xff1a; 裸金属 → 虚拟机 → 容器→ 函数化、代码化 云计算涌现出很多改变传统IT架构和运维方式的新技术&#xff0c;比如虚拟机、容器、微服务、Serverless&#xff08;无服务&#xff09;&#xff0c;无论这些技术应用在哪些场景&…

智慧能源解决方案-最新全套文件

智慧能源解决方案-最新全套文件一、建设背景存在的问题二、建设架构三、建设方案四、获取 - 智慧能源全套最新解决方案合集一、建设背景 我国工业能耗占全国总能耗比例近70%&#xff0c;许多经济大省工业能耗占比甚至显著高于70%&#xff0c;工业企业能耗增速也明显领先全国其…

Bash脚本debug攻略

初学Bash时, 我从未想过去debug Bash脚本, 也从未想过Bash脚本也能debug. 随着技术的增长, 写的脚本越来越复杂, 使用echo打印日志来调试脚本的方式也越来越捉襟见肘了. 直到某天 通读了一遍Bash Reference Manual, 才发现Bash脚本也是可以debug的. 下面就介绍三种debug Bash脚…

定时器之编码器模式

1.什么是编码器 编码器&#xff08;encoder&#xff09;是将信号或数据进行编制、转换为可用以通讯、传输和存储的信号形式的设备。编码器把角位移或直线位移转换成电信号&#xff0c;前者称为码盘&#xff0c;后者称为码尺。 2.分类 按照读出方式编码器可以分为接触式和非接…

C++学习笔记(面向对象部分开始6500字复习总结)

函数重载 1.对象属性 对象方法 和 类属性 类方法 2.const函数read only&#xff0c;不会修改任何数据 3.class默认private&#xff0c;struct默认public 4.&#xff01;&#xff01;&#xff01;&#xff01;C编译器优化&#xff01;&#xff01;&#xff01;《个人理解》当…

单细胞分析:数据整合(九)

导读 本文将学习跨条件执行单细胞整合&#xff0c;以识别彼此相似的细胞。 1. 目标 跨条件对齐相同的细胞类型。2. 挑战 对齐相似细胞类型的细胞&#xff0c;这样就不会因为样本、条件、模式或批次之间的差异而在后续分析中进行聚类。 3. 推荐 建议先不整合分析&#xff0c;再决…

2020下半年软件设计师上午题错题总结

2020下半年 1、以下关于两个浮点数相加运算的叙述中&#xff0c;正确的是 &#xff08;3&#xff09; 。 A. 首先进行对阶&#xff0c;阶码大的向阶码小的对齐 B. 首先进行对阶&#xff0c;阶码小的向阶码大的对齐 C. 不需要对阶&#xff0c;直接将尾数相加 D. 不需要对阶…

[附源码]java毕业设计网上购物商城

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

33.nacos客户端读取多配置文件实例(springcloud)

1.配置文件的读取方式【重点】nacos 配置中心通过 namespace、dataId 和 group 来唯一确定一条配置。 Namespace&#xff1a;即命名空间。默认的命名空间为 public&#xff0c;我们可以在 Nacos 控制台中新建命名空间&#xff1b;dataId&#xff1a;即配置文件名称 Group &…

比 O(nlog(n)) 做得更好——创造合适的条件

我们可以比 O(nlog(n)) 更快地排序。 长按关注《Python学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 扫码关注《Python学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 介绍 我将介绍一种我称之为 groupSort 的排序方法。我没有直接解决排序问题…

基于小波变换编码的纹理图像分割

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 我们使用11或13维特征向量表示图像中的每个像素。两个特征用于表示像素之间的空间关系&#xff1b;由图像尺寸规格化的x和y像素坐标。对于灰度图像&#xff0c;一个特征是低通表示&#…

Python编程从入门到实践 第十一章:测试代码 练习答案记录

Python编程从入门到实践 第十一章&#xff1a;测试代码 练习答案记录 练习题导航Python编程从入门到实践 第十一章&#xff1a;测试代码 练习答案记录11.1 测试函数11.1.1 单元测试和测试用例11.1.2 可通过的测试11.1.3 未通过的测试11.1.4 测试未通过时怎么办11.1.5 添加新测试…

Flutter/Dart 中的 extension 方法

Flutter Dart 中的 extension 方法 前言 我们将讨论 extension 方法如何对我们有用&#xff0c;以及为什么您的代码因为它们而变得更加精确和可读的原因。 简介 在本文中&#xff0c;我们将学习 Dart 中的 extension 方法。也许你想知道那是什么&#xff0c;它是如何工作的&…

HIve数仓新零售项目DWS层的构建(Full join)模型

HIve数仓新零售项目 注&#xff1a;大家觉得博客好的话&#xff0c;别忘了点赞收藏呀&#xff0c;本人每周都会更新关于人工智能和大数据相关的内容&#xff0c;内容多为原创&#xff0c;Python Java Scala SQL 代码&#xff0c;CV NLP 推荐系统等&#xff0c;Spark Flink Kaf…

全自动调节灯光强度的实现(仿真+程序+文档)

目 录 摘 要 I Abstract II 绪论 1 1.1 选题背景及意义 1 1.2 国内外研究现状 1 1.3 研究主要内容 3图书馆学习桌台灯智能控制系统简介与方案分析 4 2.1 大学图书馆照明控制现状 4 2.2 图书馆学习桌台灯智能控制系统简介 4 2.3 系统控制方案分析 4 2.4 本章小节 5系统硬件设计…

JavaScript练手小技巧:我破解了原神官网全屏滚动的秘密

这个标题有点夺人眼球&#xff0c;哈啊哈~骗点击率的。 “原神”官网当真的做的很漂亮&#xff0c;虽然我没玩过这个游戏&#xff0c;但是禁不住喜欢这个网站啊。 https://ys.mihoyo.com/ 最近居家教学上网课。除了上课&#xff0c;实在不想做学校安排的其它任务&#xff0c…

热量衡算习题课

第一部分 --- 传热计算综合例题 1.qm是质量流量&#xff0c;T1&#xff0c;2和 t1,2对应的是热流体和冷流体分别在管道进口和出口的温度 2.吊塔tm是传热温差 3.α1是热流体的对流传热系数&#xff0c;α2是冷流体的对流传热系数&#xff0c;K是整个对流传热过程的总的传热系…

【Linux】在Xilinx平台上实现UVC Gadget(2)- 解决dwc3驱动bug

【Linux】在Xilinx平台上实现UVC Gadget&#xff08;2&#xff09;- 解决dwc3驱动bug一、bug描述二、具体修改方法1. 找到内核源码位置并复制到其他目录2. Petalinux里面设置使用自定义内核源码1) 选第2个Linux Components Selection2) 选linux-kernel&#xff0c;回车&#xf…