springboot接收集合,springboot读取服务器文件

  springboot接收集合,springboot读取服务器文件

  

目录

SpringBoot接收文件和对象。1.接收HttpServletrequest,并自己处理请求(不推荐)。2.接收实体,并将文件放入对象属性中(推荐)。3.接收参数,并将文件放入接收参数中。4.一个坑。使用第二种方法时,SpringBoot接口在同时接收JSON数据和文件时会遇到问题。原代码如下。经过调查,发现有两种方法可以解决这个问题。

 

  00-1010使用场景:中的接口需要接收文件和实体,即参数。

  1.此时前端不能传输json格式的数据,而是使用multipart/form-data;这种格式传输数据。

  第二,那么,这个时候,后端应该如何接收这个参数和文件呢?

  

SpringBoot接收文件和对象

@ post mapping(value=/upload )@ response body公共字符串handle file upload(http servlet request请求){ multiparthttpservlet request params=((multiparthttpservlet request)请求);//获取文件listmurtipartfilefiles=((multiparthttpservlet request)请求)。get files( file );//获取参数字符串name=params . getparameter( name );

 

  00-1010公共类userfilereq {//参数私有字符串username//file私有MultipartFile文件;//省略get set } @ post mapping(value=/upload )@ response body公共字符串句柄文件上传(userfile req req){//文件和参数在实体中}

  00-1010该方法适合接收单个文件参数,建议使用对象接收多个参数,方便扩展。

  @ post mapping(value=/upload )@ response body公共字符串handle file upload(multipart file file){ }

  

1.接收HttpServletRequest,自己处理request(不推荐)

确保不要添加@RequestBody。如果添加此注释,您将报告以下错误。

 

  {timestamp: 1571196217195, status: 415, error: 不支持的媒体类型, exception : org . spring framework . web . httpmediatypenotsupportedexception , message: 内容类型 multipart/form-data;boundary=2gOOYeFBpECharset=UTF-8 不支持, path 3360/file/upload}所以,在接收文件时,不要使用@RequestBody注释。

  但是,可以使用@Validated注释(检查参数的注释)。

  00-1010最近公司有一个通过一个接口上传处理过的数据的要求。由于数据过于复杂,它以JSON格式提交数据。接口通过@RequestBody获取数据,并将其映射到相应的对象。需要注意的一个问题是,前端在提交数据时需要将HTTP头中的Content-Type设置为application/json。考试写完了就完事了,但是要求突然变了。提交数据时需要同时上传一个文件,所以我查了一下数据,发现@RequestBody对应的类型是application/json,而文件Multipart对应的类型是multipart/form-data。这两种格式不兼容,所以不管怎么写,调用都失败。

  

2.接收实体,将文件放到对象属性中(推荐)

 

  00-1010首先将Content-type类型设置为multipart/form-data;

  1.简化参数,提取JSON参数,传递后重新拼接。

  2.将@RequestBody修饰的实体参数作为JSON字符串传递,然后通过GSON或FastJSON进行转换。

  因为第二种方法简单,所以采用第二种方法。

  以上个人经验,希望能给大家一个参考,也希望大家能支持盛行的IT。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: