Spring MVC – HTTP消息转换器

通常,您需要为用户提供相同的数据,但格式不同,例如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表示形式。

甜点的几个链接:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值