【OpenFeign】 POST 示例
【OpenFeign】 POST 示例
Metadata
title: 【OpenFeign】 POST 示例
date: 2023-01-02 19:44
tags:
- 行动阶段/完成
- 主题场景/组件
- 笔记空间/KnowladgeSpace/ProgramSpace/ModuleSpace
- 细化主题/Module/OpenFeign/示例
categories:
- OpenFeign
keywords:
- OpenFeign
description: 【OpenFeign】 POST 示例
【OpenFeign】 POST 示例
POST 请求一般用于数据提交到服务器,比如添加数据,上传文件等。
1. 传递单个对象参数
默认形参没有添加注解时,就会放入到请求体中,这个时候会使用编码器,将对象编码,并以Content-Type: application/json
形式发送请求,所以只要注意在服务提供者中,添加@RequestBody
注解,将请求体转为对象即可。
@PostMapping("addOrder")
public Order addOrder(@RequestBody Order order);
2. 传递多个对象参数
如果像下面这样使用两个@RequestBody
,是会报错的:
@PostMapping("addOrderAnd")
public Order addOrderAnd(@RequestBody Order order,@RequestBody Account account);
这时候需要将两个对象封装在一个对象中,变成单个对象进行请求传递:
@PostMapping("addOrderAnd")
public Order addOrderAnd(@RequestBody AccountAndOrder accountAndOrder);
3. 上传文件
上传文件时,需要注意的是需要使用@RequestPart
注解,Fiegn 会解析这个注解,标记为上传文件请求,还需要指定consumes
为MULTIPART_FORM_DATA_VALUE
,编码器会根据这个配置,将文件对象进行编码。
@PostMapping(value = "/spring/upload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE,produces =MediaType.APPLICATION_JSON_VALUE )
@ResponseBody
public Object springUpload(@RequestPart("file") MultipartFile file) ;
在调用方,上传文件时,则需要将文件对象转为MultipartFile
。
一般不采用 Feign 去上传文件,这种方式请求链路比较长,性能很低,一般都是前端直接上传到文件服务器,然后再告诉后台上传了哪个文件。
@GetMapping("/insertOrder")
public Object insertOrder() {
File file = new File("E:\\javaPro\\prime-code-generator\\pom.xml");
MultipartFile multipartFile =fileToMultipartFile(file);
Object o = orderFeign.springUpload(multipartFile);
return o;
}
public static MultipartFile fileToMultipartFile(File file) {
String fieldName = "file";
FileItemFactory factory = new DiskFileItemFactory(16, null);
FileItem item = factory.createItem(fieldName, "multipart/form-data", true, file.getName());
int bytesRead = 0;
byte[] buffer = new byte[8192];
try {
FileInputStream fis = new FileInputStream(file);
OutputStream os = item.getOutputStream();
while ((bytesRead = fis.read(buffer, 0, 8192)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
return new CommonsMultipartFile(item);
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 蝶梦庄生!
评论