SpringMVC 学习(七)之报文信息转换器 HttpMessageConverter

目录

1 HttpMessageConverter 介绍

2 @RequestBody 注解

3 @ResponseBody 注解

4 RequestEntity

5 ResponseEntity

6 @RestController 注解


1 HttpMessageConverter 介绍

         HttpMessageConverter 报文信息转换器,将请求报文(如JSON、XML、HTML等)转换为 Java 对象,或将 Java 对象转换为响应报文。SpringMVC 提供了多个内置的 HttpMessageConverter 实现,以支持不同的数据格式和数据类型。

以下是一些常见的 HttpMessageConverter 实现:

  • MappingJackson2HttpMessageConverter:用于将 Java 对象转换为 JSON 格式的 HTTP 响应,或将 JSON 格式的 HTTP 请求转换为 Java 对象

  • StringHttpMessageConverter:用于将 String 对象转换为 HTTP 响应的报文信息,或将 HTTP 请求中的报文信息转换为 String 对象

  • MappingJackson2XmlHttpMessageConverter:用于将 Java 对象转换为 XML 格式的 HTTP 响应,或将 XML 格式的 HTTP 请求转换为 Java 对象

  • ByteArrayHttpMessageConverter:用于将字节数组转换为 HTTP 响应的报文信息,或将 HTTP 请求中的报文信息转换为字节数组

       HttpMessageConverter 提供了两个注解 (@RequestBody 和 @ResponseBody) 和两个类型 (RequestEntity 和 ResponseEntity)。 其中,@RequestBody 和 @ResponseBody 是用于处理 HTTP 请求和响应的注解,而 RequestEntity 和 ResponseEntity 是用于封装 HTTP 请求和响应的类型。

        SpringMVC 能够自动根据请求的 Content-Type 和 Accept 来选择合适的转换器进行报文信息的转换。

  • @RequestBody 注解: 根据请求头的 Content-Type 属性,逐一匹配合适的HttpMessageConverter 转换器来读取数据
  • @ResponseBody 注解: 根据请求头的 Accept 属性(逗号分隔),来遍历可用的 HttpMessageConverter 转换器,以找到能够处理对应类型的转换器

注:使用转换器时,需要注意转换器的优先级,如上图所示,数字越小,优先级越高。

@RequestBody 注解

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

@PostMapping("/create")
public void createNewObject(@RequestBody MyObject myObject) {
    // 处理接收到的对象
}

@ResponseBody 注解

        @ResponseBody 注解用于标识一个控制器方法,可以将该方法的返回值直接作为响应报文的响应体并响应到浏览器

@GetMapping("/get")
@ResponseBody
public MyObject getObject() {
    MyObject myObject = // 获取对象的逻辑
    return myObject;
}

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";
}

5 ResponseEntity

        ResponseEntity 用于封装 HTTP 响应的详细信息。它提供了一种灵活的方式来表示和处理 HTTP 响应,包括状态码、响应头和响应体。

@GetMapping("/hello")
ResponseEntity<String> hello() {
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.set("Custom-Header", "Value");

    return new ResponseEntity<>("Hello World!", headers, HttpStatus.OK);
}

        上述代码中,"Hello World!" 是响应体的 Java 对象,可以是任意类型 (如 String、Object、List 等),headers 是响应头,HttpStatus.OK 是状态码,使用 HttpStatus 枚举来指定。

6 @RestController 注解

        @RestController 注解是 SpringMVC 中用于标记控制器类的一个注解。它使得控制器类可以直接返回数据(字符串、对象、集合等)给客户端,而不需要额外的视图解析。

@RestController
public class MyController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Biotin aniline,生物素苯胺,用于研究蛋白质结构和功能

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;769933-15-5&#xff0c;Biotin aniline&#xff0c;生物素苯胺&#xff0c;Biotin-aniline&#xff0c;生物素-苯胺 一、基本信息 【产品简介】&#xff1a;Biotin aniline is composed of three parts: biotin, w…

【会议征稿通知】第十届人文学科与社会科学研究国际学术会议(ICHSSR 2024)

第十届人文学科与社会科学研究国际学术会议&#xff08;ICHSSR 2024) 2024 10th International Conference on Humanities and Social Science Research 第十届人文学科与社会科学研究国际学术会议&#xff08;ICHSSR 2023)将于2024年4月26-28日在中国厦门隆重举行。会议主要…

RabbitMQ的常见工作模式

Work queues 工作队列模式 模式说明 通过Helloworld工程我们已经能够构建一个简单的消息队列的基本项目&#xff0c;项目中存在几个角色:生产 者、消费者、队列&#xff0c;而对于我们真实的开发中 &#xff0c;对于消息的消费者通过是有多个的。 比如在实现用户注册功能时&…

Apache Calcite 一条 SQL 的查询计划生成之旅【上】

作者&#xff1a;沈磊&#xff08;LakeShen&#xff09;&#xff0c;公众号&#xff1a;雷克分析 背景 Apache Calcite 作为一款开源的动态数据管理框架&#xff0c;由于其模块化、可扩展、以及不和任何计算引擎绑定的特性&#xff0c;目前在开源项目和商业化产品中已得到广泛…

Cesium 自定义Primitive

1、为什么要自定义Primitive a、在飞机飞行过程中&#xff0c;如果使用entity同时绘制飞机和线的时候&#xff0c;会发现飞机的飞行位置和线的位置不统一&#xff0c;出现差距&#xff0c;出现脱线。 b、结合代码分析&#xff0c;cesium的线和飞机模型是分开渲染的&#xff0c;…

跨境电商与支付介绍

1、跨境电商定义和分类&#xff1b; 2、国际贸易清结算&#xff1b; 3、跨境支付&#xff1b; 1、跨境电商定义和分类 跨境电商业务简单说就是指不同国家地域的主体通过电子商务进行交易的一种业务模式。同传统的电商不同&#xff0c;交易双方属于不同的国家。因此&#xff0…

LaMa Image Inpainting 图像修复 ONNX Runtime Demo

目录 介绍 效果 模型信息 项目 代码 下载 LaMa Image Inpainting 图像修复 Onnx Demo 介绍 gihub地址&#xff1a;https://github.com/advimman/lama &#x1f999; LaMa Image Inpainting, Resolution-robust Large Mask Inpainting with Fourier Convolutions, WAC…

C++——友元

目录 友元 友元函数 友元函数使用案例 友元类 友元 友元是C提供的一种突破封装&#xff08;突破类域&#xff09;的方式&#xff0c;有时提供了便利。但是友元会增加耦合度&#xff0c;但破坏了封装&#xff0c;所以友元不宜多用。友元分为友元函数和友元类。 友元函数 友元…

SpringBoot 的基础使用与入门(总结众多文章与实践)

一&#xff1a;介绍 1、SpringBoot概念 从最根本上来讲&#xff0c;Spring Boot就是一些库的集合&#xff0c;它能够被任意项目的构建系统所使用。简便起见&#xff0c;该框架也提供了命令行界面&#xff0c;它可以用来运行和测试Boot应用。框架的发布版本&#xff0c;包括集成…

电脑DLL修复工具,一键解决计算机dll丢失

mfc120u.dll 是一个属于 Microsoft Visual Studio 2013 或相关版本的 Microsoft Foundation Classes (MFC) 动态链接库(DLL)文件。MFC 是一个用于简化 Windows 应用程序开发的 C 类库&#xff0c;它封装了许多Windows API 函数&#xff0c;使开发者更容易创建 Windows 应用程序…

C语言 vs Rust应该学习哪个?

C语言 vs Rust应该学习哪个&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「C语言的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&am…

Github配置ssh key的步骤

1. 检查本地主机是否已经存在ssh key 是否存在 id_rsa 和 id_rsa.pub文件&#xff0c;如果存在&#xff0c;说明已经有SSH Key 如下图所示&#xff0c;则表明已经存在 如果存在&#xff0c;直接跳到第三步 2. 生成ssh key 如果不存在ssh key&#xff0c;使用如下命令生…

奇点云:SAFe框架下,我们对平台软件工程生产线做了4项改造

导读&#xff1a; 客户规模扩大&#xff0c;如何保证大数据软件产品和服务质量始终如一&#xff1f;几乎所有成长中的软件厂商&#xff0c;尤其是需要通过私有化部署交付的厂商&#xff0c;都会面临这个问题。正如《人月神话》中多次表明的&#xff0c;单纯地增加人手、扩大团队…

吴恩达deeplearning.ai:sigmoid函数的替代方案以及激活函数的选择

以下内容有任何不理解可以翻看我之前的博客哦&#xff1a;吴恩达deeplearning.ai专栏 文章目录 引入——改进下需求预测模型ReLU函数(整流线性单元 rectified linear unit&#xff09;线性激活函数(linear activation function)激活函数的选择实现方式为什么需要激活函数 到现在…

使用SSH推拉Github代码

快速使用 ssh-keygen -t rsa -b 4096 -C "your_emailexample.com 创建ssh密钥&#xff08;一直回车&#xff0c;不要指定目录&#xff0c;不要设置密码&#xff09;将生成的 ~/id_ras.pub 中的内容复制到Github对应位置即可 1.SSH简介 SSH&#xff08;Secure Shell&…

Python实现时间序列分析动态因子模型(DynamicFactor算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 动态因子模型&#xff08;Dynamic Factor Models, DFM&#xff09;是一种统计学和计量经济学中用于处理…

算法项目外包的收费方式

针对算法研究性项目的收费方式和注意事项&#xff0c;这取决于项目的具体性质、规模和所涉及的技术领域。以下是一些常见的收费方式和需要注意的问题&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 收…

Spring Exception 常见错误

今天&#xff0c;来学习 Spring 的异常处理机制。Spring 提供了一套健全的异常处理框架&#xff0c;以便我们在开发应用的时候对异常进行处理。但是&#xff0c;我们也会在使用的时候遇到一些麻烦&#xff0c;接下来我将通过两个典型的错误案例&#xff0c;带着你结合源码进行深…

WEB漏洞 SSRF简单入门实践

一、漏洞原理 SSRF 服务端请求伪造 原理&#xff1a;在某些网站中提供了从其他服务器获取数据的功能&#xff0c;攻击者能通过构造恶意的URL参数&#xff0c;恶意利用后可作为代理攻击远程或本地的服务器。 二、SSRF的利用 1.对目标外网、内网进行端口扫描。 2.攻击内网或本地的…

Selenium自动化落地实践

01、自动化测试流程图 02、主要过程描述 1、自动化测试的切入点 开展自动化测试的时间点很关键&#xff0c;需要在系统已经过多版本的系统测试&#xff0c;达到稳定之后。 2、可行性分析 在进行项目自动化测试之前&#xff0c;第一步就是要确认其可行性&#xff0c;是否可以…
最新文章