SpringBoot处理form-data表单接收对象数组

这篇具有很好参考价值的文章主要介绍了SpringBoot处理form-data表单接收对象数组。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

主要是为了存档,碰到表单传对象数组的情况,一般都是一个表单只能传一个对象,后面经过跟前端的研究和讨论发现居然可以传对象数组,以此作为记录分享。

@Data
public class SealLocationInfoRequest  implements Serializable {
    private static final long serialVersionUID = 2392716281569231777L;
    private Long contractId;
    private Long serverId;
    private String filePath;
    private List<SealLocationInfo> sealLocationInfoList;
 
}
@Data
public class SealLocationInfo  implements Serializable {
    private static final long serialVersionUID = -8706741125508276806L;
    private Integer posType;//定位或关键字
    private float posX;
    private float posY;
    private String signOnPage;
    private Long sealId;
    private String key;
    private float width;
    private Integer signType;//2.骑缝章  1.其他

}

测试直接使用下标方式请求

直接使用属性下标的方式传递

请求:

springboot接收数组对象,spring boot,后端,java

示例代码:

@PostMapping(value = "/upload/multiple")
public ResponseEntity<ResponseResult<List<Object>>> uploadMultiple1213Batch(
    MultipartFile pdfFile,
    //            @ModelAttribute("request")
    List<SealLocationInfoRequest> request) throws Exception {
    //            @RequestParam("hosts") SealLocationInfoRequest hosts) throws Exception {
    //            @ModelAttribute("hosts") SealLocationInfoRequest hosts) throws Exception {
    return OpsResponse.ok(null);
}

结果:

java.lang.IllegalStateException: No primary or single unique constructor found for interface java.util.List

结果明显不适配报错

测试二使用对象包裹的方式传输

    @PostMapping(value = "/upload/multiple")
    public ResponseEntity<ResponseResult<List<Object>>> uploadMultiple1213Batch(
            MultipartFile pdfFile,
//            @ModelAttribute("request")
//            List<SealLocationInfoRequest> request) throws Exception {
//            @RequestParam("hosts") SealLocationInfoRequest hosts) throws Exception {
             SealLocationInfoRequest hosts) throws Exception {
        return OpsResponse.ok(null);
    }

请求体

springboot接收数组对象,spring boot,后端,java

curl的方式

curl --location 'http://localhost:8088/upload/record/upload/multiple' \
--header 'Content-Type: multipart/form-data' \
--header 'Accept: */*' \
--header 'Authorization: acf179d575a7492fbbf5deefbdc69fbd' \
--header 'from-service: trade-gateway' \
--header 'gateway_header: 2131321' \
--header 'traceId: 12312' \
--form 'sealLocationInfoList[0].posX="123213"'

头一次发现还可以使用这种方式,就像json传输一样,不过需要手动设置下标,对了,文件也可以这样传输,可以放对象里面也可以放外面,但是属性名字一样会双重注入。

SpringBoot的接收

1. 使用@RequestParam注解来接收表单数据中的数组对象。

以下是一个示例:

@PostMapping("/example")
public ResponseEntity<String> handleFormData(@RequestParam("objects") List<Object> objects) {
    // 处理接收到的对象数组
    return ResponseEntity.ok("Received " + objects.size() + " objects");
}

在上面的示例中,我们使用@RequestParam注解来声明我们要接收名为objects的表单参数,并将其映射到一个List<Object>类型的变量中。

2. 如果你的对象是一个自定义类,您可以使用@ModelAttribute注解来将表单数据映射到该类的实例中。以下是一个示例:

@PostMapping("/example")
public ResponseEntity<String> handleFormData(@ModelAttribute("customObject") CustomObject[] customObjects) {
    // 处理接收到的自定义对象数组
    return ResponseEntity.ok("Received " + customObjects.length + " custom objects");
}

在上面的示例中,我们使用@ModelAttribute注解来声明我们要接收名为customObject的表单参数,并将其映射到一个CustomObject[]类型的变量中。

3. `x-www-form-urlencoded` 和 `form-data` 协议的区别

`x-www-form-urlencoded` 和 `form-data` 是 HTTP 请求中常用的两种表单数据编码方式。

`x-www-form-urlencoded` 是默认的编码方式,它会将表单数据转换为键值对,并使用 `&` 符号进行分隔,然后将键值对以 `key1=value1&key2=value2` 的形式进行编码。这种编码方式通常用于较小的表单数据,如登录表单等。

而 `form-data` 则是一种更加灵活的编码方式,它可以处理二进制数据(如图片、文件等)以及文本数据。它会将每个表单字段封装成一个独立的部分,每个部分都可以设置自己的 Content-Type,这样就可以支持发送多个文件或者多个键值对。这种编码方式通常用于上传文件等操作。

总结

传输数组队列不需要使用注解,在测试传输中不写注解反而能通过写了,写了@RequestPart注解反而通过不了,具体细节之后更新细则讲解,这篇主要讲解协议和请求,主要解决了表单形式传输对象的问题。

参考

Difference Between form-data, x-www-form-urlencoded and raw in Postman | Baeldung

Forms in HTML documents

javascript - appending array to FormData and send via AJAX - Stack Overflow

使用formData向后台传递数组对象文章来源地址https://www.toymoban.com/news/detail-778000.html

到了这里,关于SpringBoot处理form-data表单接收对象数组的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • post请求设置表单form-data格式的几种方式

    我用默认的post方法发送数据的时候发现后端获取不到数据,然而在network中看到参数是的确传出去的了。而且用postman测试的时候也是可以的,比较了下两个的不同发现是postman使用的是form-data格式,于是用form-data格式再次请求,发现OJBK 这两种格式都是无法使用的:   方法一:

    2024年02月11日
    浏览(68)
  • Python 实现http server接收mutipart/form-data文件 方法1

    PostMan生成Python 代码: 代码基本功能 :实现将客户端发送的文件转发到本地。 代码中的打印 :为了调试方便代码中增加了一些关于boudary的打印。 代码中的自定义字段 :代码中的 ‘file’ 就是postman客户端请求中的文件名称。

    2024年02月07日
    浏览(44)
  • asp.net core webapi接收application/x-www-form-urlencoded和form-data参数

    框架:asp.net core webapi asp.net core webapi接收参数,请求变量设置 Post ([FromForm]TokenRequestInput user) 可以接收发送类型为multipart/form-data、application/x-www-form-urlencoded的数据 请求地址 http://localhost:5170/api/User/GetToken?code=22222 IFormFile file这个参数是接收文件,mimeType=multipart/form-data 参数use

    2024年04月15日
    浏览(39)
  • 关于form-data和http请求body&网关处理

    场景 【在http过网关时,修改内容】 在网关过滤器中,监听所有http请求,截获请求,并且修改body中内容。添加一组用户凭证,然后通过网关走向后台服务 使用applicaon/json的请求时,能很好的解决 使用form-data时,body采用下面的 \\\'boundary—\\\'限定边界,加入参数的形式进行传递

    2024年02月08日
    浏览(38)
  • Go语言项目后端使用gin框架接收前端发送的三种格式数据(form-data,json,Params)

    使用gin框架的BindJSON方法,将前端的json格式数据将后端的结构体相绑定,从而获取到前端所发送的数据,并返回给前端 1.将前端发送过来的数据全部返回 2.将前端发送过来的json格式数据选择性返回   使用gin框架的PostForm方法,从而获取到前端form格式的参数 使用gin框架中的

    2024年02月01日
    浏览(115)
  • Vue中form表单校验rules的问题(对象数组过滤新对象数组 ,对象校验,数组校验,)

    const data = reactive({ form: { js //往数组中添加这八个相机配置参数 for(var i=0;i8;i++){ const clonedLightObject1 = { …data.form.lightObject1 }; clonedLightObject1.productNameId=pid clonedLightObject1.cameraType=i clonedLightObject1.shootingNumber=1 页面

    2024年02月08日
    浏览(50)
  • SpringBoot:使用application/octet-stream 流式上传大文件,解决Mutipartfile multipart/form-data上传产生临时文件问题

    multipart的流不是HTTPRequest的流,而是服务器的临时文件流 multipart/form-data是表单上传,接口可以从Mutipartfile对象获取输入流getInputStream,表面上看没产生临时文件 org.springframework.web.multipart.support.StandardMultipartHttpServletRequest的getInputStream 这里面的流是从DiskFileItem(一眼磁盘)拿的

    2024年02月14日
    浏览(40)
  • vue +element UI form表单校验数组嵌套,数组对象必填校验

    使用element表单时会出现数组对象类型的数据结构并且需要必填校验 这时数组对象的检验方法就为paramJsonListRules 注意的是为了实现校验,在需要校验的el-form-item内通过自己的:rules加入对象的校验方法,例如图中想给参数值加校验则直接在相关el-form-item内加入 :rules=\\\"paramJsonLis

    2024年02月11日
    浏览(71)
  • Java发送form-data请求

    在Java中发送form-data请求,可以使用Apache HttpClient或OkHttp这样的HTTP客户端库来发送请求。 1.添加依赖 2.代码 对于HttpClient对象,HttpClientBuilder.create().build()创建的实例是 不需要手动关闭 的。 在使用HttpClientBuilder创建HttpClient对象时,不需要手动关闭HttpClient对象。这是因为HttpCli

    2024年02月10日
    浏览(44)
  • 理解 HTTP 中的 multipart/form-data

    HTTP 是一种基于请求-响应模型的网络通信协议,主要用于 Web 中客户端和服务器之间通信的数据传输。事实上,如今的互联网就是构建在 HTTP 之上的。基于请求-响应模式的通信方式很简单,客户端向服务器发送请求,服务器处理请求并进行响应。 HTTP 其实并不关心我们想要传

    2024年02月08日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包