详解 SpringMVC 的 HttpMessageConverter

文章目录

  • 前言
  • 参考资料
  • 内容
      • 1、[@RequestBody ](/RequestBody )
      • 2、RequestEntity
      • 3、[@ResponseBody ](/ResponseBody )
      • 4、SpringMVC处理json
      • 5、SpringMVC处理ajax
      • 6、@RestController注解
      • 7、ResponseEntity
  • 推荐读物 《Spring Boot微服务实战(第2版)》
    • 内容简介
    • 目录


在这里插入图片描述

前言

HttpMessageConverter是Spring Framework中的一个接口,用于处理HTTP请求和响应的消息转换。

在Spring MVC中,HttpMessageConverter主要用于将HTTP请求的输入内容转换为指定的Java对象,以及将Java对象转换为HTTP响应的输出内容。它负责处理请求和响应的数据格式转换,例如将请求的JSON或XML数据转换为Java对象,并将Java对象转换为JSON或XML格式的响应数据。

Spring MVC提供了多个默认的HttpMessageConverter实现,包括处理JSON、XML、文本等格式的Converter。另外,我们也可以自定义HttpMessageConverter来处理其他格式的数据。

通过配置HttpMessageConverter,我们可以指定接受的数据格式和返回的数据格式,Spring MVC会根据请求的Content-Type和Accept头信息来选择合适的HttpMessageConverter进行数据转换。


参考资料

在写本篇文章过程中,参考了一部分资料,在这里也隆重推荐给大家:

参考链接


内容

1、@RequestBody

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

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

输出结果:
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";
}

输出结果:
requestHeader:[host:“localhost:8080”, connection:“keep-alive”, content-length:“27”, cache-control:“max-age=0”, sec-ch-ua:“” Not A;Brand";v=“99”, “Chromium”;v=“90”, “Google Chrome”;v=“90"”, sec-ch-ua-mobile:“?0”, upgrade-insecure-requests:“1”, origin:“http://localhost:8080”, user-agent:“Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36”]
requestBody:username=admin&password=123

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中会自动装配一个消息转换器:MappingJackson2HttpMessageConverter,可以将响应到浏览器的Java对象转换为Json格式的字符串

<mvc:annotation-driven />

c>在处理器方法上使用@ResponseBody注解进行标识

d>将Java对象直接作为控制器方法的返回值返回,就会自动转换为Json格式的字符串

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

浏览器的页面中展示的结果:

{“id”:1001,“username”:“admin”,“password”:“123456”,“age”:23,“sex”:“男”}

5、SpringMVC处理ajax

a>请求超链接:

<div id="app"><a th:href="@{/testAjax}" @click="testAjax">testAjax</a><br>
</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用于控制器方法的返回值类型,该控制器方法的返回值就是响应到浏览器的响应报文


推荐读物 《Spring Boot微服务实战(第2版)》

在这里插入图片描述

购买链接 : 购买链接

内容简介

本书介绍Spring Boot最新版本新增的功能,包括支持最新版本的Java SE、使用JUnit 5进行测试、更新用于服务发现和负载均衡的Spring Cloud工具、使用云原生构建包构建Docker映像、提供基本的集中式日志解决方案、使用Sleuth实现E2E可追溯性、使用Consul进行集中式配置、依赖项升级、支持Spring Data Neumann等。
作者使用紧贴实用的方法来解释使用这种软件架构的好处,而不是只偏重理论概念,介绍了计算机编程中的一些最先进技术。

目录

第1章 设置场景
1.1 读者对象
1.2 本书与其他书籍和指南的区别
1.2.1 学习:一个增量过程
1.2.2 本书是指南还是图书
1.3 从基础到高级主题
1.3.1 以Spring Boot为框架是更专业的方式
1.3.2 测试驱动的开发
1.3.3 微服务
1.3.4 由事件驱动的系统
1.3.5 非功能性需求
1.4 在线内容
1.5 本章小结 第2章 基本概念
2.1 Spring
2.2 Spring Boot
2.3 Lombok和Java
2.4 测试的基础知识
2.4.1 测试驱动的开发
2.4.2 行为驱动的开发
2.4.3 JUnit
2.4.4 Mockito
2.4.5 AssertJ
2.4.6 在Spring Boot中进行测试
2.5 日志记录
2.6 本章小结 第3章 一个基础的Spring Boot应用程序
3.1 搭建开发环境
3.2 Web应用的框架
3.3 Spring Boot自动配置
3.4 三层架构
3.5 域建模
3.5.1 域定义和域驱动设计
3.5.2 域类
3.6 业务逻辑
3.6.1 功能
3.6.2 随机的Challenge
3.6.3 验证Attempt
3.7 表示层
3.7.1 REST
3.7.2 Spring Boot和REST API
3.7.3 设计API
3.7.4 第一个控制器
3.7.5 自动序列化的工作方式
3.7.6 使用Spring Boot测试控制器
3.8 本章小结 第4章 用React构建微前端
4.1 快速了解React和Node
4.2 搭建开发环境 …… 第5章 数据层 第6章 从微服务开始 第7章 事件驱动的架构 第8章 微服务架构中的常见 后记



在这里插入图片描述



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

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

相关文章

logback-spring自定义日志配置

配置文件命名为logback-spring.xml。 <?xml version"1.0" encoding"UTF-8"?> <configuration debug"true"><!--用springProperty来配置的话&#xff0c;可以直接读取properties文件--><!-- <springProperty scope…

笔记本360wifi,wifi共享大师掉线,

笔记本上搭建的wifi热点&#xff0c;例如360wifi、wifi共享大师等&#xff0c;手机连接wifi后总是隔一段时间掉线。原因:网卡驱动和无线驱动有问题&#xff0c;需要更新或换成稳定的网卡驱动和无线驱动。 解决方案: ① 安装驱动精灵: ②点击驱动管理 ③ ④ ⑤进行阻止windo…

iOS自动化测试方案(四):保姆级搭建iOS自动化开发环境

文章目录 一、基础环境准备1.1、MacOS虚拟机 二、iPhone虚拟机三、MacOS虚拟机连接iphone真机四、扩展&&问题4.1、如果appium启动app失败&#xff0c;可能是appium driver没有安装xcuitest插件4.2、下载并安装Appium服务端&#xff0c;inspector元素定位器4.3、下载app…

贝锐向日葵亮相阿里云“云栖大会”:独创专利算法赋能全新云桌面

2023年10月31日-11月2日&#xff0c;一年一度的云栖大会如期举办&#xff0c;国产远程连接服务创领者贝锐受邀参与。活动现场&#xff0c;贝锐CTO张小峰进行了分享&#xff0c;宣布贝锐旗下国民级远程控制品牌“贝锐向日葵”与无影展开合作&#xff0c;同时全新的“云桌面”将于…

数据结构:AVL树讲解(C++)

AVL树 1.AVL树的概念2.平衡因子3.节点的定义4.插入操作5.旋转操作&#xff08;重点&#xff09;5.1左单旋5.2右单旋5.3左右双旋5.4右左双旋 6.一些简单的测试接口7.完整代码 1.AVL树的概念 普通二叉搜索树&#xff1a;二叉搜索树 二叉搜索树虽可以缩短查找的效率&#xff0c;但…

安装MySQL时出现 由于找不到 MSVCR120.dll,无法继续执行代码。重新安装程序可能会解决此问题。

--------------------------- mysqld.exe - 系统错误 --------------------------- 由于找不到 MSVCR120.dll&#xff0c;无法继续执行代码。重新安装程序可能会解决此问题。 --------------------------- 确定 --------------------------- 安装MySQL时出现 “This appl…

分布式服务框架设计

目录 服务框架的设计 服务框架的功能 服务框架的性能指标 服务治理需要哪些功能 服务框架的设计 尽管不同的分布式服务框架实现细节存在差异&#xff0c;但是核心功能差异不大&#xff0c;下面的架构图描绘了一个分布式服务框架的整体逻辑架构 总共分为 3 层&#xff1a;1…

Ansible自动化安装部署及使用

目录 前言 一、环境概况 修改主机名&#xff08;可选项&#xff09; 二、安装部署 1.安装epel扩展源 2.安装Ansible 3.修改Ansible的hosts文件 4.生成密钥 三、Ansible模块使用介绍 Command模块 Shell模块 User模块 Copy模块 File模块 Hostname模块 Yum模块 Ser…

Ubuntu重启后进入initramfs导致无法开机解决方案

今天&#xff0c;我的电脑意外关机&#xff0c;重新开机后打开了虚拟机。该虚拟机使用的是 Ubuntu 22.04 系统。但重启后&#xff0c;系统一直显示(initramfs):&#xff0c;导致无法正常启动。最后&#xff0c;在网上查找了一些解决方案&#xff0c;成功解决了这个开机问题。在…

圣杯布局/双飞翼布局/flex/grid等,实现CSS三栏自适应布局的几种方法

简介 三栏布局是网页设计中常用的布局&#xff0c;即网页中的内容被分为三块&#xff1a;左侧/中间/右侧。其中两侧部分宽度固定&#xff0c;中间部分宽度自适应的根据浏览器宽度撑满剩余空间。而三栏布局也有很多变形&#xff0c;比如两栏或者N栏布局&#xff0c;上中下三栏布…

Linux shell编程学习笔记21:用select in循环语句打造菜单

一、select in循环语句的功能 Linux shell脚本编程提供了select in语句&#xff0c;这是 Shell 独有的一种循环语句&#xff0c;非常适合终端&#xff08;Terminal&#xff09;这样的交互场景&#xff0c;它可以根据用户的设置显示出带编号的菜单&#xff0c;用户通过输入不同…

爱德华的台灯真的好用?爱德华、书客、好视力护眼台灯对比测评

如今孩子近视的比例越来越大&#xff0c;而且时间越来越提前&#xff0c;一些上小学的孩子开始近视佩戴眼镜。其实造成近视的原因不外乎作业坐姿不标准&#xff0c;学业时间太长缺少户外的运动&#xff0c;也包括可能灯光光源的问题造成对于视力的影响。如果希望孩子有一个较好…

MATLAB算法实战应用案例精讲-【图像处理】计算机视觉(最终篇)

目录 知识储备 线阵相机调试 1.相机型号参数 2.相机软件安装 3.编码器连接方式 4.采集卡说明

3.26每日一题(线性非齐次的特解如何设)

1、非齐次方程有e的2x次幂&#xff1a;特解也有e的2x次幂 2、e的2x次幂前面有特殊的一元方程&#xff1a;特解要设为一般的特征方程&#xff08;axb&#xff09; 3、求线性齐次特征方程的特征根&#xff1b; 4、判断e的 rx 次幂中的 r 和特征根有没有重合的个数&#xff1a;…

【每日一题】数组中两个数的最大异或值

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;哈希集合 其他语言python3 写在最后 Tag 【哈希集合】【位运算-异或和】【数组】【2023-11-04】 题目来源 421. 数组中两个数的最大异或值 题目解读 找出数组中两个数的最大异或结果。 解题思路 一看数据量达到了 …

Ubuntu20.04搭建RISC-V和qemu环境

1. 前言 risc-v是一个非常有潜力的指令集框架&#xff0c;最近对其产生了浓厚的兴趣&#xff0c;由于之前对于这方面的知识储备很少&#xff0c;在加上网上的教程都是点到为止&#xff0c;所以安装过程异常曲折。好在最后一步一步积累摸索&#xff0c;终于利用源码安装完成。看…

【中国知名企业高管团队】系列59:TCL

今天华研荟为大家介绍TCL公司的情况和创始人李东生先生的故事。 一、关于TCL TCL创立于1981年&#xff0c;前身为中国首批13家合资企业之一&#xff1a;TTK家庭电器(惠州)有限公司&#xff0c;该公司为中港合资企业&#xff0c;最初从事卡式录音磁带的生产制造&#xff0c;19…

Oracle11g 安装Multimedia

sqlplus / as sysdba; [oracle安装目录]\dbhome_1\initjvm.sql [oracle安装目录]\\dbhome_1\RDBMS\ADMIN\initxml.sql [oracle安装目录]\\dbhome_1\RDBMS\ADMIN\xmlja.sql [oracle安装目录]\\dbhome_1\RDBMS\ADMIN\catjava.sql [oracle安装目录]\\dbhome_1\RDBMS\ADMIN\catexf…

二十三种设计模式全面解析-装饰器模式-超越继承的灵活装扮

在软件开发中&#xff0c;我们经常面临需要为对象动态地添加额外的功能或属性的情况。继承是一种常见的解决方案&#xff0c;但它有时会导致类的爆炸性增长和复杂的继承层次结构。在这种情况下&#xff0c;装饰器模式&#xff08;Decorator Pattern&#xff09;是一种强大的设计…

【OC】使用协议(Protocol)在Cocoa应用程序中实现视图控制器之间的通信

在Cocoa应用程序开发中&#xff0c;视图控制器&#xff08;ViewController&#xff09;之间的通信是非常常见的需求。为了实现这种通信&#xff0c;我们可以使用协议&#xff08;Protocol&#xff09;来定义一个接口&#xff0c;然后让视图控制器遵循该协议并实现相应的方法。本…