首页 > 编程语言 >@RequestPart-Java接口,同时传参JSON对象数据和文件

@RequestPart-Java接口,同时传参JSON对象数据和文件

时间:2024-07-23 10:51:58浏览次数:11  
标签:传参 Java String RequestParam JSON RequestPart 参数 data

简单介绍

  1. 前端传递文件参数的时候,通常会使用POST方式传参,将请求header的content-type设置为:multipart/form-data(因为 GET 请求只能传递文本类型的参数,而文件属于二进制数据,无法直接通过 GET 方式传递。)

  2. 前端通过POST传参时,header的content-type设置为"application/json"

  3. 前端通过GET方法传递参数时,一般不会使用 Content-Type 请求头,因为 GET 请求的参数是通过 URL 中的查询字符串参数来传递的,不需要使用 Content-Type 请求头来表示参数的类型

  4. 后端接收POST请求请求:参数为JSON对象时,使用@RequestBody 注解标识

  5. 后端接收POST请求:参数为文件时,使用(@RequestParam("file") MultipartFile file),(@RequestPart(value = "file", required = true) MultipartFile file) 两种方式的注解都行

  6. 后端接受POST请求:参数为JSON对象+文件时:这时候可以使用@RequestPart参数来接收实体对象,@RequestParam来单个接收参数

@RequestPart这个注解用在multipart/form-data表单提交请求的方法上。

@RequestParam也同样支持multipart/form-data请求。

@RequestParam和@RequestPart的区别是:@RequestParam适用于name-valueString类型的请求域,@RequestPart适用于复杂的请求域(像JSON,XML)

详细例子

传很多个参数

将传参header的content-type设置为:multipart/form-data ,将每个参数都当做文件进行传参(字段类型不同,文件为MultipartFile类型 ,文件数组为MultipartFile[]类型,其他为String类型) (前端很容易设置)
Postman测试接口工具

Java后端代码:注解全用@RequestParam ,全部用这一个注解接收参数(可行)

   @PostMapping("/addDirectlySellGoods")
   public Resource<String> addDirectlySellGoods(@RequestParam("goodsPicture") MultipartFile[] goodsFile, @RequestParam("certPicture") MultipartFile[] certFile,
                                                 @RequestParam("goodsName") String goodsName, @RequestParam("goodsType") String goodsType, 
                                                 @RequestParam("goodsFee") String goodsFee, @RequestParam("sellerPosition") String sellerPosition, 
                                                 @RequestParam("wechatAcct") String wechatAcct, @RequestParam("goodsDesc") String goodsDesc) {
       InDirectlySellDto in = new InDirectlySellDto();
       in.setGoodsName(goodsName);
       in.setGoodsType(goodsType);
       in.setGoodsFee(goodsFee);
       in.setSellerPosition(sellerPosition);
       in.setWechatAcct(wechatAcct);
       in.setGoodsDesc(goodsDesc);
       System.out.println("直接卖前端传递的参数:" + in);
       String data = consignmentService.addDirectlySellGoods(goodsFile,certFile,in);
       //String data = "COMMON_SUCCESS";
       return new Resource<>(props.getProcessStatus(data));
   }

自己项目中写的前端代码:
也是用于传输多个图片以及两个值 经纬度

<script>
    function submitForm() {
        var formData = new FormData();
        var files = document.getElementById('files').files;
        for (var i = 0; i < files.length; i++) {
            formData.append('files', document.getElementById('files').files[i]);
        }
        formData.append('lng', document.getElementById('lng').value);
        formData.append('lat', document.getElementById('lat').value);

        fetch('/ComprehensiveScoring/getScore', {
            method: 'POST',
            body: formData,
        })
            .then(response => response.json())
            .then(data => {
                // 假设后端返回的是JSON格式的数据
                document.getElementById('scoreValue').innerHTML = '<pre>' + JSON.stringify(data, null, 2) + '</pre>';
            })
            .catch(error => {
                console.error('Error:', error);
                document.getElementById('scoreValue').innerHTML = '<p>Error occurred.</p>';
            });
        // 由于是按钮点击事件,不需要阻止表单的默认提交行为
    }

</script>

传一个文件参数+一个JSON对象

前端需将传参header的content-type , 通过判断设置为两种multipart/form-data + application/json(需百度自行查询,前端可能不容易设置)
Postman测试接口工具


ava后端代码:注解全用@RequestPart ,全部用这一个注解接收参数(可行)

@Validated 注解:用于验证 Java 对象中的属性是否符合验证规则(未仔细研究,不加一般也不会报错),可以提高代码的可读性和可维护性,同时也可以避免一些常见的错误,如空指针异常等

   /**
     * 数据上报接⼝
     */
    @PostMapping("/dataReport")
    public Resource<String> dataReport(@RequestPart(value = "file", required = true) MultipartFile file ,@RequestPart @Validated DataReportInDto dto){
        String code = dataReportService.dataReport(file,dto);
        return new Resource<>(props.getProcessStatus(code));
    }

标签:传参,Java,String,RequestParam,JSON,RequestPart,参数,data
From: https://www.cnblogs.com/shuijibaobao/p/18317802

相关文章

  • java枚举类定义
    知识点:1.枚举的优雅创建2.values()遍历枚举中的常量值3.valueof(Stringname):根据名称获取枚举类中定义的常量值;要求字符串跟枚举的常量名必须一致;下面是枚举创建:package**;importcom.baomidou.mybatisplus.core.enums.IEnum;importjava.io.Serializable;public......
  • Java 支持的数据类型与 MySQL 支持的数据类型对比
    Java支持的数据类型与MySQL支持的数据类型对比整数类型:Java:byte,short,int,longMySQL:TINYINT,SMALLINT,INT,BIGINT对应关系:byte对应MySQL的TINYINTshort对应MySQL的SMALLINTint对应MySQL的INTlong对应MySQL的BIGINT浮点数类型:Java......
  • 使用 json 配置文件进行 Python 日志记录
    我玩弄了日志模块,发现了一些我不太清楚的事情。首先,因为这是一个大程序,我希望代码尽可能简单,因此我使用了json配置文件.{"version":1,"disable_existing_loggers":false,"formatters":{"simple":{"format":"%(asctime)s-%(name)s......
  • 在 JavaScript 异步接收到的浏览器中显示 pdf
    我有一个Django应用程序,我从JS打电话索要pdf。Django视图返回HttpResponse的application/pdf如何让JS将接收到的application/pdf数据显示为pdf?Django视图defpdf_generation(request):context={}t=get_template('html_pd......
  • 【vue+jdbc实现数据库操作java web前后分离版】
    创建数据库droptableifexistsusers;createtableusers(idbigint(20)notnullauto_incrementcomment'用户id',usernamevarchar(100)default''comment'用户名',phone......
  • 学习java第一百三十八天
    Bean的作用域1、singleton:单例,Spring中的bean默认都是单例的。2、prototype:每次请求都会创建一个新的bean实例。3、request:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTPrequest内有效。4、session:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTPsession......
  • 《Java初阶数据结构》----1.<时间复杂度&空间复杂度计算>
    目录算法效率:一、时间复杂度的计算1.1时间复杂度的表示1.2常见时间复杂度大小排序 1.3计算示例冒泡排序的时间复杂度二分查找的时间复杂度 阶乘递归factorial的时间复杂度斐波那契递归的时间复杂度二、空间复杂度的计算冒泡排序的空间复杂度计算fibonacci的空间复......
  • Java学习——多线程
    1.多线程介绍1.1什么是多线程具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程,提升性能。1.2并发与并行并行:在同一时刻,有多个指令在多个CPU上同时执行。并发:在同一时刻,有多个指令在单个CPU上交替执行。高并发是什么意思:cpu2核4线程表示可并行处理4......
  • 如何理解JAVA的编码格式是Unicode
    背景今天看以前的JAVA视频,发现课件里面写着JAVA的内部的编码格式是Unicode。这句话,突然勾起了我的好奇心。因为的JAVA代码文件都是UTF8编码,怎么跟Unicode扯上关系的呢?我去问了一下AI,然后整理了一下Unicode是JAVA编译器的读取class文件使用的编码假设,我的如下代码是UTF-8编......
  • java-cglib动态代理原理
    cglib使用1.引入依赖<!--添加cglib依赖--><dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>3.3.0</version>&......