前言
我们在做微服务间进行网络传输的时候,一般会使用到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数据传输。