@FeignClient微服务转发之间踩过的坑

1.@RequestParam
正常情况下:@RequestParam String name,请求中url带参是不需要()的,但是微服务转发时则必须带,即@RequestParam(“name”) String name
否则微服务启动时就报错

	Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'xxxxxxxxxxxxxx': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalStateException: RequestParam.value() was empty on parameter 5
		at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:185)
		at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:103)
		at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1636)
		at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:254)
		at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
		at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:208)
		at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1314)
		at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1280)
		at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1099)
		at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1064)
		at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:835)
		at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741)

2.get请求中包含对象问题

	public PageBean<xxxxxx> findXxxtByKeyWord(@PathVariable @Length(max = 50) String type,
        @Valid User user,@Valid Color color, PageVo pageVo)

(AssetListReq对象中包含Color对象,但是还是要单独将Color对象拉出来)

使用@FeignClient注解时get请求不能有对象,需要将对象中的所有属性挨个取出逐一赋值,但是这个是可以避免的,引入相关依赖以及修改配置

Feign默认使用JDK原生的URLConnection发送HTTP请求,没有连接池,但是对每个地址会保持一个长连接,即利用HTTP的persistence connection 。
我们可以用Apache的HTTP Client替换Feign原始的http client, 从而获取连接池、超时时间等与性能息息相关的控制能力。Spring Cloud从Brixtion.SR5版本开始支持这种替换,首先在项目中声明Apache HTTP Client和feign-httpclient依赖。

增加配置:(yml)

		feign:
		  httpclient:
			enabled: true

相关依赖

		<!-- 使用Apache HttpClient替换Feign原生httpclient -->
			<dependency>
				<groupId>org.apache.httpcomponents</groupId>
				<artifactId>httpclient</artifactId>
				<version>xxxxx</version>
			</dependency>
			<dependency>
				<groupId>com.netflix.feign</groupId>
				<artifactId>feign-httpclient</artifactId>
				<version>xxxxx</version>
			</dependency>

如果不做替换,当用对象当参数传入时,会自动转化为Post请求
(源码未找到,以下为转载)

		private synchronized OutputStream getOutputStream0() throws IOException {
		  try {
			  if(!this.doOutput) {
					throw new ProtocolException("cannot write to a URLConnection if doOutput=false - call setDoOutput(true)");
		 } else {
			  if(this.method.equals("GET")) {
				   this.method = "POST";
		 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值