【Feign】feignclient发送formdata请求


在这里插入图片描述

前言

小伙伴们在使用feign进行远程调用时,会遇到formdata类型的post请求,希望以下内容可以帮助到大家。

实操

  1. 在FeignClient接口的方法上添加 @RequestMapping 注解,并设置请求的URL和请求方法。
  2. 在方法的参数列表中添加 @RequestParam 注解或 @RequestPart 注解,用于接收请求参数。
  3. 在FeignClient接口上添加 @FeignClient 注解,并设置服务的名称。
  4. 在启动类上添加 @EnableFeignClients 注解,以启用FeignClient。

示例代码

	@FeignClient(name = "example-service")
	public interface ExampleFeignClient {
	
	    @RequestMapping(value = "/example", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
	    void uploadFile(@RequestPart("file") MultipartFile file, @RequestParam("name") String name);
	}
	@RestController
	public class ExampleController {
	
	    private final ExampleFeignClient exampleFeignClient;
	
	    @Autowired
	    public ExampleController(ExampleFeignClient exampleFeignClient) {
	        this.exampleFeignClient = exampleFeignClient;
	    }
	
	    @PostMapping("/upload")
	    public void uploadFile(@RequestParam("file") MultipartFile file, @RequestParam("name") String name) {
	        exampleFeignClient.uploadFile(file, name);
	    }
	}
	@SpringBootApplication
	@EnableFeignClients
	public class Application {
	    public static void main(String[] args) {
	        SpringApplication.run(Application.class, args);
	    }
	}

在上述示例中,ExampleFeignClient 接口定义了一个 uploadFile 方法,用于发送 FormData 请求。ExampleController类中的 uploadFile 方法接收请求参数,并调用 ExampleFeignClient 接口的 uploadFile 方法。启动类中的 @EnableFeignClients 注解用于启用 FeignClient

注意

需要注意的是,上传文件时,需要使用 @RequestPart 注解来接收文件,并使用consumes属性设置请求的Content-Type为multipart/form-data

常见问题

formdata类型的post请求,为什么参数会被拼到url上?

分析

在正常的FormData类型的POST请求中,参数是不会被拼接到URL上的。FormData类型的请求是通过请求体进行传输的,而不是通过URL进行传输的。

如果参数被拼接到URL上,很可能是由于以下原因导致的:

  1. 请求方法不正确:如果使用的是GET方法而不是POST方法发送FormData请求,那么参数会被拼接到URL上。
  2. 错误的注解使用:在FeignClient中,如果使用了 @RequestParam 注解而不是 @RequestPart 注解来接收请求参数,参数会被拼接到URL上。

总结

请确保请求方法正确,并使用 @RequestPart 注解来接收FormData请求的参数。

@RequestPart只可以接收文件吗?

分析

不,@RequestPart注解不仅可以用于接收文件,还可以用于接收其他类型的参数,例如字符串、数字等。

@RequestPart注解用于指定请求体中的一个部分,并将其作为参数传递给方法。它可以用于接收多种类型的参数,包括文件、字符串、数字、对象等。

一些示例

  1. 接收文件:
    	@PostMapping("/upload")
    	void uploadFile(@RequestPart("file") MultipartFile file);
    
  2. 接收字符串:
    	@PostMapping("/data")
    	void postData(@RequestPart("message") String message);
    
  3. 接收对象:
    	@PostMapping("/data")
    	void postData(@RequestPart("user") User user);
    

注意

请注意,当使用@RequestPart注解接收非文件类型的参数时,通常需要设置请求的Content-Type为multipart/form-data。

如果大家遇到类似问题,欢迎评论区讨论,如有错误之处,敬请留言。

在这里插入图片描述

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘刘刘刘刘先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值