Spring MVC:HTTP消息转换器

SpringMVC源码解析之消息转换器HttpMessageConverter 本篇文章主要介绍了SpringMVC源码解析之消息转换器HttpMessageConverter ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 立即下载

了解有关Spring MVC和HTTP消息转换器的更多信息。

通常,你需要为用户提供相同的数据,但是以不同的形式(例如JSON,PDF,XLS等)为用户提供。如果你的应用程序是基于Spring Framework的,则可以使用HTTP消息转换器来完成此任务。

需要将HTTP请求(或其部分)转换为处理程序方法参数所需的类型(有关更多信息,请参阅处理程序方法—方法参数)时,或者需要处理程序方法返回值时,将应用HTTP消息转换器。 转换为创建HTTP响应的方式(有关更多信息,请参见处理程序方法-返回值)。

Spring框架为你提供了一组预定义的HTTP消息转换器。 例如,对于字节数组,JSON等,可以修改或扩展此集合以最适合你的需求。

在本文中,我们将重点介绍如何使用稍后提供的示例将处理程序方法返回的值转换为所需的形式(请参阅下面的链接以查看源代码存储库)。
假设我们有一个控制器返回一些Team数据,像这样(是的,我知道,我已经忽略了teamId):

@RestController
public class TeamDetailsController {
    @GetMapping("/teams/{teamId}/")
    public Team read() {
        final Set<TeamMember> members = new LinkedHashSet<>();
        members.add(new TeamMember("Albert Einstein", LocalDate.of(1879, 3, 14)));
        members.add(new TeamMember("Benjamin Franklin", LocalDate.of(1706, 1, 17)));
        members.add(new TeamMember("Isaac Newton", LocalDate.of(1643, 1, 4)));
        return new Team(members);
    }
}

在我们的示例中,默认情况下,处理程序方法响应将转换为JSON:

{
  "members": [
    {
      "dateOfBirth": "1879-03-14",
      "name": "Albert Einstein"    },
    {
      "dateOfBirth": "1706-01-17",
      "name": "Benjamin Franklin"    },
    {
      "dateOfBirth": "1643-01-04",
      "name": "Isaac Newton"    }
  ]
}

If 如果我们想将处理程序返回的数据转换为XLS文件,我们可以简单地将一个bean定义为HTTP消息转换器实现,它将由HTTPAccept标头激活:

@Service
public class TeamToXlsConverter extends AbstractHttpMessageConverter<Team> {
    private static final MediaType EXCEL_TYPE = MediaType.valueOf("application/vnd.ms-excel");
    TeamToXlsConverter() {
        super(EXCEL_TYPE);
    }
    @Override
    protected Team readInternal(final Class<? extends Team> clazz, final HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
        return null;
    }
    @Override
    protected boolean supports(final Class<?> clazz) {
        return (Team.class == clazz);
    }
    @Override
    protected void writeInternal(final Team team, final HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
        try (final Workbook workbook = new HSSFWorkbook()) {
            final Sheet sheet = workbook.createSheet();
            int rowNo = 0;
            for (final TeamMember member : team.getMembers()) {
                final Row row = sheet.createRow(rowNo++);
                row.createCell(0)
                   .setCellValue(member.getName());
            }
            workbook.write(outputMessage.getBody());
        }
    }
}

你必须记住,在我们的示例中,当处理程序方法返回Team类型的值(请参阅支持方法)且HTTP接受标头匹配``application / vnd.ms-excel’'时,将始终应用定义的HTTP消息转换器 ”。 在这种情况下,将返回HTTP消息转换器生成的XLS文件而不是Team的JSON表示形式。

喜欢这篇文章的可以点个赞,欢迎大家留言评论,记得关注我,每天持续更新技术干货、职场趣事、海量面试资料等等
如果你对java技术很感兴趣欢迎加入Java技术交流防脱发群907135806交流学习,共同学习进步。
不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代
在这里插入图片描述

文章写道这里,欢迎完善交流。最后奉上近期整理出来的一套完整的java架构思维导图,分享给大家对照知识点参考学习。有更多JVM、Mysql、Tomcat、Spring Boot、Spring Cloud、Zookeeper、Kafka、RabbitMQ、RockerMQ、Redis、ELK、Git等Java干货
在这里插入图片描述

深度强化学习调参技巧:以DQN、DDPG、TD3、PPO、SAC等算法为例 深度强化学习调参技巧:以D3QN、DDPG、TD3、PPO、SAC算法为例 阅读详情

相关推荐

【Musescore 】开源打谱软件 快速入门笔记

前两天做了个西贝柳斯的打谱软件学习笔记,反正都是初学,今天再来学习一款同类软件,比较之后确定一款深入学习。 西贝柳斯的学习笔记在此:https://blog.youkuaiyun.com/yuetaope/article/details/120020342 西贝柳斯是商业收费软件,要么花钱,要么盗版,如果您觉得这两者都不大好,那么推荐您试试Musescore。 Musescore是一款非常优秀的开源的打谱软件,生态繁荣。“开源”和“生态”是码农业的术语,我用正常人类的语言简单解释一下。 开源就是开放程序源代码,对码农

专注于医院数据分析技术与系统开发的创作与分享。 1万+

SCI论文投稿状态全解析:从Submitted到Accepted的完整流程与应对策略

学术论文投稿系统是科研发表的核心工具,其状态流转机制反映了同行评审的底层逻辑。从稿件提交、编辑初审到外审、决策和修回,每个状态对应编辑部内部操作,理解这些状态有助于研究者合理管理投稿节奏。在Editorial Manager、ScholarOne等主流系统中,状态变化如Under Review、Decision in Process等,直接影响稿件命运。掌握状态含义能减少焦虑,提升修回效率,适用于初次投稿和资深研究者。本文详细解析从Submitted到Accepted的全流程,提供实操建议。

weixin_34176694的博客 263

Matcap与菲涅尔

菲尼尔效果(简化版公式):fresnel = base + scale*((1-v*n)^power)透明队列为后前渲染,不关闭深度写入则会覆盖之前的像素,导致混合不了。y的值为0~1,根据x3返回对应y值。两色混合做个demo看看!混合为什么要关闭深度写入?

weixin_62773441的博客 371

Spring MVC 消息转换器

同样,当控制器方法返回响应时,Spring MVC会根据客户端请求的Accept头部信息,查找适合的消息转换器将Java对象转换成响应消息的数据格式。当客户端(例如浏览器)向服务器发送请求时,服务器需要将请求消息转换成服务器应用程序可以理解的形式,同样当服务器向客户端发送响应时,服务器应用程序需要将响应消息转换成客户端可以理解的形式。消息转换器是Spring MVC框架中的一种功能强大的机制,它可以将HTTP请求和响应中的消息体与Java对象之间进行转换。

ylsace的博客 2269

利用Python爬虫获取淘宝商品评论:实战案例分析

在数字化时代,数据的价值日益凸显,尤其是对于电商平台而言,商品评论作为用户反馈的重要载体,蕴含着丰富的信息。本文将详细介绍如何利用Python爬虫技术获取淘宝商品评论,包括代码示例和关键步骤解析。

2401_87849335的博客 2833

竞赛经验——挑战杯、互联网加、北斗杯、微软创新杯、计算机设计等比赛教训与经验

最近参加一些比赛,北斗杯、挑战者杯、微软创新杯等比赛,每次比赛都有不少需要总结的地方,特别是项目展示上技巧很多,总结一下。 首先最重要的是作品自身硬!自身的作品完成度不高,或者是没有创新点,就没必要参加了。 比如是出去比赛的话,我反正每次碰到最多的是智慧农场、智慧家居之类,不知道为啥这种的太多了。如果是创业型比赛,评委基本会问小米已经做得很好了很便宜了,你的优势在哪里?这些都是常见的问题提前要...

沉迷单车的追风少年 7325

SpringMVC消息转换器

SpringMVC消息转换器解决Long类型数据精度丢失问题

qhl0930的博客 2260

matlab 质心重合法实现点云配准【2026最新版】

质心重合法是将源点云和目标点云的质心重合,以此缩小两点云集之间的平移误差,从而为下一步粗配准提供更好的初始位置姿态。

点云侠的博客 509

SpringMVC对消息转换器的处理相关

1 SpringBoot启动MVC本质是配置一些处理MVC请求的组件到Spring容器中2 SpringBoot默认提供了Spring MVC自动配置,不需要添加@EnableWebMvc注解去启动3 如果需要配置MVC,比如拦截器,格式化,视图,Http消息转换器,可以使用@Configuration并实现WebMvcConfigurer接口,不要添加@EnableWevc4 @EnableWebMvc与SpringMvc的MVC自动装配类WebMvcAutoConfiguration不会都执行,他们是

米二DeFans 972

ImportError: DLL load failed while importing _rust: 找不到指定的程序的解决方案

 本文主要介绍了ImportError: DLL load failed while importing _rust: 找不到指定的程序的解决方案,希望能对使用Python的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 19万+

【EPS精品教程】EPS2016三维测图版安装教程(附EPS2016安装包下载地址)

EPS地理信息工作站是北京清华山维新技术开发有限公司历经十五年精心研发和打造,为满足“以地理信息服务为中心”的信息化测绘生产需求而推出的测绘生产活动多种业务模块集成化软件系统。主要功能有:(1)测绘与地理信息多业务模块集成管理;(2)多元多尺度多种类数据集成管理;(3)跨平台异构数据转换;(4)数据监理;(5)自动缩编与综合;(6)坐标转换与动态投影;(7)地理信息模板定制;(8)GIS地理信息描述与CAD图形表达一体化支持;(9)GIS数据库更新维护;(10)图形打印与地图出版。 一、安装过程 EP..

智慧空间实验室 2万+

spring MVC 3.2+ 中关于@ResponseBody返回乱码的完美解决方案

今天因为springMVC的返回乱码问题搞了我好几个钟,怎么搞都弄不好,

染尘 1712

MATLAB - 激光雷达 - 相机联合标定(Lidar-Camera Calibration)

激光雷达传感器和相机通常在自动驾驶应用中结合使用,因为激光雷达传感器收集三维空间信息,而相机则以二维图像捕捉空间的外观和纹理。您可以融合来自这些传感器的数据来改进物体检测和分类。激光雷达-相机标定可以估算出一个变换矩阵,给出两个传感器之间的相对旋转和平移。在进行激光雷达-相机数据融合时,您可以使用该矩阵。本图说明了激光雷达和相机标定 (LCC) 过程的工作流程,我们使用棋盘格作为标定对象。我们从激光雷达和相机数据中提取棋盘角和平面,然后在它们的坐标系之间建立几何关系,进行标定。

机器人控制与仿真应用 7370

springMVC配置消息转换器

SpringMVC配置消息转换器 定义一个消息转换器处理类,该类必须继承AbstractHttpMessageConverter 消息转换器处理类: Actio

qq_38921377的博客 1295

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

@RequestBody和@ResponseBody和消息转换器机制原理

1、Spring3.1开始使用新的HandlerMapping 和 HandlerAdapter 来支持@Contoller 和@RequestMapping注解处理:处理器映射RequestMappingHandlerMapping和处理器适配器RequestMappingHandlerAdapter组合来代替Spring2.5 开始的处理器映射DefaultAnnotationHandlerM...

Hedwig的博客 6247

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Building a RESTful api with Spring note1

Understanding REST in SpringThe Spring framework supports 2 ways of creating RESTful services: using MVC with ModelAndView using HTTP message converters The ControllerCRUD methodMapping the HTTP respon

吃苦胆的野狼 374

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

一个 HTTP 请求进来后,到底经历了什么?Spring MVC 完整链路拆解

我们从一个「回车」出发,追完了一个 HTTP 请求的一生。全景:Tomcat 接客 → Spring MVC 调度 → 业务代码干活 → 原路返回;是「总调度」,自己不干活、专管分发;问路,按 URL 找到 Handler 和拦截器链;当翻译官,把请求参数(尤其 JSON)变成方法入参;消息转换器进出两趟都在干活:JSON→对象、对象→JSON;拦截器在处理器前后盯梢,异常处理器在出事时兜底;AOP/事务是代理对象在方法外包的一层,就是这么来的;想拦截请求。

weixin_52201538的博客 1095

spring3.1之后配置messageConverter

是一种简写形式,完全可以手动配置替代这种简写形式,简写形式可以让初学都快速应用默认配置方案。 会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的。 这句话我在很多帖子都看到过,我自己的项目本身使用的Spring MVC 3.2,实

张肖的博客 1465

springboot自定义消息转化器的二种方法

//消息转换器第一种方法 /*@Bean public StringHttpMessageConverter stringHttpMessageConverter(){   StringHttpMessageConverter httpMessageConverter=new StringHttpMessageConverter(Charset.forName("ISO-8859-1"));

2512

spring mvc返回json格式疑问@ResponseBody

The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers (). 经过排查原来是配置文件方式不同引起的: 首先引入 jackso

沙漏哟 6677

SpringMVC接收json数据转对象中的一些问题(415错误的解决)

在使用@requestBody方法获取传入的json字符串转化成对象的时候一直报415的错,主要是由于在springmvc.xml中没添加这部分: controller写法: package com.liang.testspring.controller; import org.springframework.stereotype.Controller; im...

weixin_30470643的博客 629

Spring mvc自动装配

Spring mav自动装配 官方文档 https://docs.spring.io/spring-boot/docs/current/reference/html/web.html#web.servlet.spring-mvc.auto-configuration 当一个springboot项目引入了spring-boot-starter-web这个web场景启动器之后 org.springframework.boot spring-boot-starter-web Spring B...

weixin_47249025的博客 653

Spring for Android架构设计:从客户端到服务端的完整通信方案终极指南

Spring for Android是一个强大的开源框架,它为Android开发者提供了与Spring生态系统无缝集成的完整通信解决方案。这个框架的核心优势在于简化了Android应用与后端服务之间的数据交换,让开发者能够专注于业务逻辑而不是底层的网络通信细节。😊 ## 🔍 Spring for Android架构概览 Spring for Android的架构设计采用了经典的客户端-服务

gitblog_00432的博客 1019

掀开<mvc:annotation-driven/>的面纱

前言随着springmvc对注解的支持,基于注解的开发方式使用也是越来越多。配置文件和基于注解的开发方式,想必有过开发经验的人都知道他们的区别。在使用注解的过程中一般开发会经常在springmvc的配置文件中看到<mvc:annotation-driven/>,通常会在上面看到注释“开启注解功能”,这么简单的一句话,真的就能涵盖这个标签背后强大的功能吗??显然是不能的,这背后spring为我们做了很

爱琴孩的博客 732

Spring Boot 3.x HTTP PATCH方法处理不支持问题详解

Spring Boot 3.x中处理HTTP PATCH方法常见问题包括405/415错误和空值处理异常,主要源于默认配置不支持PATCH、数据绑定机制限制及Spring Boot 3.x的严格校验。解决方案包括:1)使用@PatchMapping注解显式声明;2)通过Map或DTO接收部分更新;3)实现自定义类型转换逻辑。核心是正确处理部分更新与空值,避免全量覆盖。

深山技术宅的博客 899

从源码解析@RestControllerAdvice与@ControllerAdvice的设计差异与应用场景

本文通过解析Spring源码,深入剖析了@ControllerAdvice与@RestControllerAdvice的核心设计差异。@ControllerAdvice服务于传统服务端渲染应用,默认走视图解析流程;而@RestControllerAdvice作为其组合注解,通过集成@ResponseBody,专为RESTful API设计,将返回值直接序列化为JSON响应。文章还结合实战场景,为不同架构提供了清晰的选型建议。

http9protocoller的博客 400
上一篇: 实用 具有Spring Cloud和 Docker 的微服务架构
下一篇: 带有Dubbo的Spring Cloud Alibaba
程序员plus
博客等级 码龄8年 41粉丝 151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值