【OkHTTP网络通信】远程传输文件/JSON数据,附代码,亲测有效!

本文介绍了如何在微服务场景中使用OkHttp3库分别处理文件上传和JSON数据传输,包括请求体的构建和HTTP请求的执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

我们在做微服务间进行网络传输的时候,一般会使用到Feign,但是有些时候需要对请求的格式做好限定,所以本文着重介绍了传输两个典型格式的数据形式。
文中 //… 表示省略与本文无关代码

1、首先

​ 导入okHttp3的依赖,刷新maven后确认已经导入成功。

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>3.14.9</version>
</dependency>

2、导入包

//注意不要导错包,导成Spring的包了
import okhttp3.*

3、编码

第一种情况:传输文件

public R function() {
    //...  
    
    File pdfFile = new File("[填写上传文件的路径]");
    
    Response response = null; //定义变量,获取结果
    try{
        OkHttpClient client = new OkHttpClient().newBuilder().build();
        MediaType mediaType = MediaType.parse("text/plain");
        //封装请求体
        RequestBody newBody = new MultipartBody.Builder().setType(MultipartBody.FORM)					.addFormDataPart("file","/filePath/test.pdf", 
                                    RequestBody.create(MediaType.parse("application/octet-stream"), pdfFile))
                            .build();
        Request request = new Request.Builder()
            .url("http://IP:端口号/api/emitFile")
            .method("POST", newBody)
            .addHeader("param1", "param-content").build();
        //执行请求
        response = client.newCall(request).execute();

        log.info("结果:"+response);
    }catch (Exception e){
        e.printStackTrace();
    }

    //解析
    String result = response.body().string();
    
    //...
    return R.ok();
}
  • addFormDataPart的第一个参数是文件的参数名,第二个参数填写文件的文件名或者数据类型等,即表单数据的键值对的值(value),这里是"/filePath/test.pdf",表示文件路径,第三个参数表示要放在请求体即传输的数据。
  • ”application/octet-stream“表示文件将以二进制形式传播。
  • 注意param1是自行添加的,你可以根据自己的业务需求,往请求头内添加参数。

第二种情况:传输JSON数据

public R function(TestDTO tDto) { 
    //.. 
    
    Response signRsp = null;
    try{
        OkHttpClient client = new OkHttpClient().newBuilder().build();
         //封装请求体
        RequestBody newBody = RequestBody.create(MediaType.parse("application/json"),requestBody);
        Request request = new Request.Builder()
            .url("http://ip:端口号/api/emitJSON")
            .method("POST", newBody)
            .addHeader("param1", "param-content")
            .addHeader("param2",tDto.geId()).build();
         //执行请求
        signRsp = client.newCall(request).execute();

        log.info("结果:"+signRsp);
    }catch (Exception e){
        e.printStackTrace();
    }
    
      //解析
    String result = signRsp.body().string();
    
    //...
    return R.ok();
}
  • 注意区分传输文件格式和传输JSON数据在封装请求体时的区别
  • 本文两种方式皆已经测试完毕,均可正常进行http数据传输。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值