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

需要将HTTP请求(或其部分)转换为处理程序方法参数所需的类型(请参阅: 处理程序方法–方法参数 ) 或者需要以某种方式转换处理程序方法返回的值以创建HTTP响应时,将应用HTTP消息转换器。 (请参阅: 处理程序方法-返回值 )。

例如,Spring Framework为您提供了一组预定义的HTTP消息转换器。 用于字节数组,JSON等。–可以修改或扩展此集合以满足您的需求。

在本文中,我们将重点介绍如何使用我提供的示例将处理程序方法返回的值转换为所需的形式(请参见下面的源代码存储库链接)。

假设我们有一个控制器返回一些Team数据,像这样(是的,我知道,我已经忽略了Team ID)

 @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" } ]  } 

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

 @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的值(请参见supports方法)且HTTP Accept标头匹配“ application / vnd.ms-excel”时,将始终应用定义的HTTP消息转换器。 在这种情况下,将返回HTTP消息转换器生成的XLS文件,而不是Team的JSON表示形式。

甜点的几个链接:

  • GitHub储存库

翻译自: https://www.javacodegeeks.com/2019/10/spring-mvc-http-message-converter.html

Spring MVC – HTTP消息转换器相关推荐

  1. 基于Springboot外卖系统08:员工账号状态管理功能+对象转换器+扩展Spring mvc的消息转换器

    1. 员工账号状态管理 1.1 需求分析 在员工管理列表页面,可以对某个员工账号进行启用或者禁用操作.账号禁用的员工不能登录系统,启用后的员工可以正常登录.如果某个员工账号状态为正常,则按钮显示为 & ...

  2. Spring MVC自定义类型转换器Converter、参数解析器HandlerMethodArgumentResolver

    文章目录 一.前言 二.类型转换器Converter 1.自定义类型转换器 三.参数解析器 1.自定义分页参数解析器 2.自定义注解参数解析器 一.前言 Spring MVC源码分析相关文章已出: S ...

  3. Spring MVC http消息转换类

    http内容转换器 默认添加 ByteArrayHttpMessageConverter StringHttpMessageConverter ResourceHttpMessageConverter ...

  4. Spring MVC 数据类型转换器

    Spring MVC默认数据类型转换器: ConversionService converters =java.lang.Boolean -> java.lang.String : org.sp ...

  5. Spring MVC中处理Request和Response的策略

    前沿技术早知道,弯道超车有希望 积累超车资本,从关注DD开始 作者:码农小胖哥, 图文编辑:xj 来源:https://mp.weixin.qq.com/s/3eFygsiVl8dC2nRy8_8n5 ...

  6. SpringMVC自定义配置消息转换器踩坑总结

    问题描述 最近在开发时候碰到一个问题,springmvc页面向后台传数据的时候,通常我是这样处理的,在前台把数据打成一个json,在后台接口中使用@requestbody定义一个对象来接收,但是这次数 ...

  7. Spring MVC详解(学习总结)

    一.Sprig MVC简介 1.1介绍 1.2MVC是什么 二.Spring MVC实现原理 2.1核心组件 2.2工作流程 三.第一个Spring MVC 四.常用注解 五.参数绑定 5.1URL风 ...

  8. springMVC消息转换器HttpMessageConverter

    前言 为何需要消息转换器 HttpMessageConverter是用来处理request和response里的数据的. 请求和响应都有对应的body,而这个body就是需要关注的主要数据. 请求体的 ...

  9. 3 Spring MVC 数据绑定

    1 映射 Cookie Spring MVC 通过映射可以直接在业务方法中获取 Cookie 的值. @RequestMapping("/cookie") public Strin ...

最新文章

  1. 发布:IE自动打印插件
  2. Focal Loss
  3. python人工智能——机器学习——分类算法-朴素贝叶斯算法
  4. 在apache中设置访问目录后进入的默认页面为index.php
  5. jooq 执行sql_使用jOOQ和Java 8的CompletableFuture进行异步SQL执行
  6. python怎么转到下一行_Python转到下一行并保存/编辑内容
  7. 【ssh登陆问题】no matching cipher found / no matching key exchange method found
  8. 【java】Java 最坑爹的 10 大功能点
  9. 剑指offer面试题16. 数值的整数次方(二分法)
  10. Hibernate缓存的evict、clear和flush方法
  11. Solved: RDP Disconnected – Error Code 2825 mremote
  12. HDU 6070 Dirt Ratio
  13. 2022 极术通讯-安谋科技参与起草的PSA相关物联网终端安全标准介绍(电信终端产业协会发布)
  14. 毕业设计--智能智造协同管理平台
  15. oracle SQL认证考试,sql认证(sql server认证考试)
  16. 如何做站群-站群应该怎么做-站群搭建程序以及收录教程
  17. bash脚本程序语法Linux
  18. $(input[name='a']).each(function ()
  19. php 发邮件附件,php发送电子邮件附件
  20. iis7网页服务器错误,IIS7 常见错误及其解决方法

热门文章

  1. ssl初一组周六模拟赛【2018.5.12】(期中)
  2. 洛谷P1346-电车【日常图论,最短路,SPFA】
  3. 两年摸爬滚打 Spring Boot,总结了这 16 条最佳实践
  4. 分布式锁的多种实现方式
  5. java.util.Stack类简介
  6. Java日期及时间库插件 -- Joda Time.
  7. 架构师必须搞懂DNS,一篇文章就够了。
  8. Java NIO总结
  9. 详细整理分层开发步骤!
  10. 使用ueditor实现多图片上传案例——实体类(Shopping.java)