一、问题背景
1、feign接口代码
@PostMapping("/employee/listEmployeeDtosByTenantIdEmployeeIds")
ResultVO<List<SysEmployeeDto>> listEmployeeDtosByTenantIdEmployeeIds(@RequestParam(value = "tenantId)") Long tenantId,@RequestParam(value = "employeeIds)") List<String> employeeIds);
2、报错信息
feign.RetryableException: Error writing to server executing POST http://user/feign/user/employee/listEmployeeDtosByTenantIdEmployeeIds?tenantId%29=46&employeeIds%29=1226709371205726209&employeeIds%29=1226709371205726210&employeeIds%29=1226709371205726211&employeeIds%29=1226709371205726212&employeeIds%29=1226709371205726213&employeeIds%29=1226709371205726214&employeeIds%29=1226709371205726215&employeeIds%29=1226709371205726216&employeeIds%29=1226709371205726217&employeeIds%29=1226709371205726218&employeeIds%29=1226709371205726219&employeeIds%29=1226709371205726220&employeeIds%29=1226709371205726221&employeeIds%29=1226709371205726222&employeeIds%29=1226709371205726223&employeeIds%29=1226709371205726224&employeeIds%29=1226709371205726225&employeeIds%29=1226709371205726226&employeeIds%29=1226709371205726227&employeeIds%29=1226709371205726228&employeeIds%29=1226709371205726229&employeeIds%29=1226709371205726230&employeeIds%29=1226709371205726231&employeeIds%29=1226709371205726232&employeeIds%29=1226709371205726233&employeeIds%29=1226709371205726234&employeeIds%29=1226709371205726235&employeeIds%29=1226709371205726236&employeeIds%29=1226709371205726237&employeeIds%29=1226709371205726238&employeeIds%29=1226709371205726239&employeeIds%29=1226709371205726240&employeeIds%29=1226709371205726241&employeeIds%29=1226709371205726242&employeeIds%29=1226709371205726243&employeeIds%29=1226709371205726244&employeeIds%29=1226709371205726245&employeeIds%29=1226709371205726246&employeeIds%29=1226709371205726247&employeeIds%29=1226709371205726248&employeeIds%29=1226709371205726249&employeeIds%29=1226709371205726250&employeeIds%29=1226709371205726251&employeeIds%29=1226709371205726252&employeeIds%29=1226709371205726253&employeeIds%29=1226709371205726254&employeeIds%29=1226709371205726255&employeeIds%29=1226709371205726256&employeeIds%29=1226709371205726257&employeeIds%29=1226709371205726258&employeeIds%29=1226709371205726259&employeeIds%29=1226709371205726260&employeeIds%29=1226709371205726261&<…>1205776151&employeeIds%29=1226709371205776152&employeeIds%29=1226709371205776153&employeeIds%29=1226709371205776154&employeeIds%29=1226709371205776155&employeeIds%29=1226709371205776156&employeeIds%29=1226709371205776157&employeeIds%29=1226709371205776158&employeeIds%29=1226709371205776159&employeeIds%29=1226709371205776160&employeeIds%29=1226709371205776161&employeeIds%29=1226709371205776162&employeeIds%29=1226709371205776163&employeeIds%29=1226709371205776164&employeeIds%29=1226709371205776165&employeeIds%29=1226709371205776166&employeeIds%29=1226709371205776167&employeeIds%29=1226709371205776168&employeeIds%29=1226709371205776169&employeeIds%29=1226709371205776170&employeeIds%29=1226709371205776171&employeeIds%29=1226709371205776172&employeeIds%29=1226709371205776173&employeeIds%29=1226709371205776174&employeeIds%29=1226709371205776175&employeeIds%29=1226709371205776176&employeeIds%29=1226709371205776177&employeeIds%29=1226709371205776178&employeeIds%29=1226709371205776179&employeeIds%29=1226709371205776180&employeeIds%29=1226709371205776181&employeeIds%29=1226709371205776182&employeeIds%29=1226709371205776183&employeeIds%29=1226709371205776184&employeeIds%29=1226709371205776185&employeeIds%29=1226709371205776186&employeeIds%29=1226709371205776187&employeeIds%29=1226709371205776188&employeeIds%29=1226709371205776189&employeeIds%29=1226709371205776190&employeeIds%29=1226709371205776191&employeeIds%29=1226709371205776192&employeeIds%29=1226709371205776193&employeeIds%29=1226709371205776194&employeeIds%29=1226709371205776195&employeeIds%29=1226709371205776196&employeeIds%29=1226709371205776197&employeeIds%29=1226709371205776198&employeeIds%29=1226709371205776199&employeeIds%29=1226709371205776200&employeeIds%29=1226709371205776201&employeeIds%29=1226709371205776202&employeeIds%29=1226709371205776203&employeeIds%29=1226709371205776204&employeeIds%29=1226709371205776205&employeeIds%29=1226709371205776206&employeeIds%29=1226709371205776207&employeeIds%29=1226709371205776208
at feign.FeignException.errorExecuting(FeignException.java:65)
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:105)
at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:77)
at feign.ReflectiveFeignFeignInvocationHandler.invoke(ReflectiveFeign.java:102)atcom.sun.proxy.FeignInvocationHandler.invoke(ReflectiveFeign.java:102) at com.sun.proxy.FeignInvocationHandler.invoke(ReflectiveFeign.java:102)atcom.sun.proxy.Proxy150.listEmployeeDtosByTenantIdEmployeeIds(Unknown Source)
at com.oppo.sales.service.impl.SysUserFeignClientConsumeServiceImpl.listEmployeeDtosByTenantIdEmployeeIds(SysUserFeignClientConsumeServiceImpl.java:199)
at com.oppo.sales.service.impl.SysUserFeignClientConsumeServiceImplTest.listEmployeeDtosByTenantIdEmployeeIds(SysUserFeignClientConsumeServiceImplTest.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:73)
at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:83)
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner2.evaluate(ParentRunner.java:268)atorg.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)atorg.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)atorg.junit.runners.ParentRunner.run(ParentRunner.java:363)atorg.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)atorg.junit.runner.JUnitCore.run(JUnitCore.java:137)atcom.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)atcom.intellij.rt.execution.junit.IdeaTestRunner2.evaluate(ParentRunner.java:268) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) at com.intellij.rt.execution.junit.IdeaTestRunner2.evaluate(ParentRunner.java:268)atorg.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)atorg.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)atorg.junit.runners.ParentRunner.run(ParentRunner.java:363)atorg.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)atorg.junit.runner.JUnitCore.run(JUnitCore.java:137)atcom.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)atcom.intellij.rt.execution.junit.IdeaTestRunnerRepeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: java.io.IOException: Error writing to server
at sun.net.www.protocol.http.HttpURLConnection.writeRequests(HttpURLConnection.java:700)
at sun.net.www.protocol.http.HttpURLConnection.writeRequests(HttpURLConnection.java:712)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1591)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1498)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
at feign.ClientDefault.convertResponse(Client.java:150)atfeign.ClientDefault.convertResponse(Client.java:150) at feign.ClientDefault.convertResponse(Client.java:150)atfeign.ClientDefault.execute(Client.java:72)
at org.springframework.cloud.openfeign.ribbon.FeignLoadBalancer.execute(FeignLoadBalancer.java:89)
at org.springframework.cloud.openfeign.ribbon.FeignLoadBalancer.execute(FeignLoadBalancer.java:55)
at com.netflix.client.AbstractLoadBalancerAwareClient$1.call(AbstractLoadBalancerAwareClient.java:104)
at com.netflix.loadbalancer.reactive.LoadBalancerCommand$3$1.call(LoadBalancerCommand.java:303)
at com.netflix.loadbalancer.reactive.LoadBalancerCommand$3$1.call(LoadBalancerCommand.java:287)
at rx.internal.util.ScalarSynchronousObservable$3.call(ScalarSynchronousObservable.java:231)
at rx.internal.util.ScalarSynchronousObservable3.call(ScalarSynchronousObservable.java:228)atrx.Observable.unsafeSubscribe(Observable.java:10327)atrx.internal.operators.OnSubscribeConcatMap3.call(ScalarSynchronousObservable.java:228) at rx.Observable.unsafeSubscribe(Observable.java:10327) at rx.internal.operators.OnSubscribeConcatMap3.call(ScalarSynchronousObservable.java:228)atrx.Observable.unsafeSubscribe(Observable.java:10327)atrx.internal.operators.OnSubscribeConcatMapConcatMapSubscriber.drain(OnSubscribeConcatMap.java:286)
at rx.internal.operators.OnSubscribeConcatMap$ConcatMapSubscriber.onNext(OnSubscribeConcatMap.java:144)
at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:185)
at com.netflix.loadbalancer.reactive.LoadBalancerCommand1.call(LoadBalancerCommand.java:180)atrx.Observable.unsafeSubscribe(Observable.java:10327)atrx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:94)atrx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:42)atrx.Observable.unsafeSubscribe(Observable.java:10327)atrx.internal.operators.OperatorRetryWithPredicate1.call(LoadBalancerCommand.java:180) at rx.Observable.unsafeSubscribe(Observable.java:10327) at rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:94) at rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:42) at rx.Observable.unsafeSubscribe(Observable.java:10327) at rx.internal.operators.OperatorRetryWithPredicate1.call(LoadBalancerCommand.java:180)atrx.Observable.unsafeSubscribe(Observable.java:10327)atrx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:94)atrx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:42)atrx.Observable.unsafeSubscribe(Observable.java:10327)atrx.internal.operators.OperatorRetryWithPredicateSourceSubscriber1.call(OperatorRetryWithPredicate.java:127)atrx.internal.schedulers.TrampolineScheduler1.call(OperatorRetryWithPredicate.java:127) at rx.internal.schedulers.TrampolineScheduler1.call(OperatorRetryWithPredicate.java:127)atrx.internal.schedulers.TrampolineSchedulerInnerCurrentThreadScheduler.enqueue(TrampolineScheduler.java:73)
at rx.internal.schedulers.TrampolineSchedulerInnerCurrentThreadScheduler.schedule(TrampolineScheduler.java:52)atrx.internal.operators.OperatorRetryWithPredicateInnerCurrentThreadScheduler.schedule(TrampolineScheduler.java:52) at rx.internal.operators.OperatorRetryWithPredicateInnerCurrentThreadScheduler.schedule(TrampolineScheduler.java:52)atrx.internal.operators.OperatorRetryWithPredicateSourceSubscriber.onNext(OperatorRetryWithPredicate.java:79)
at rx.internal.operators.OperatorRetryWithPredicateSourceSubscriber.onNext(OperatorRetryWithPredicate.java:45)atrx.internal.util.ScalarSynchronousObservableSourceSubscriber.onNext(OperatorRetryWithPredicate.java:45) at rx.internal.util.ScalarSynchronousObservableSourceSubscriber.onNext(OperatorRetryWithPredicate.java:45)atrx.internal.util.ScalarSynchronousObservableWeakSingleProducer.request(ScalarSynchronousObservable.java:276)
at rx.Subscriber.setProducer(Subscriber.java:209)
at rx.internal.util.ScalarSynchronousObservableJustOnSubscribe.call(ScalarSynchronousObservable.java:138)atrx.internal.util.ScalarSynchronousObservableJustOnSubscribe.call(ScalarSynchronousObservable.java:138) at rx.internal.util.ScalarSynchronousObservableJustOnSubscribe.call(ScalarSynchronousObservable.java:138)atrx.internal.util.ScalarSynchronousObservableJustOnSubscribe.call(ScalarSynchronousObservable.java:129)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
at rx.Observable.subscribe(Observable.java:10423)
at rx.Observable.subscribe(Observable.java:10390)
at rx.observables.BlockingObservable.blockForSingle(BlockingObservable.java:443)
at rx.observables.BlockingObservable.single(BlockingObservable.java:340)
at com.netflix.client.AbstractLoadBalancerAwareClient.executeWithLoadBalancer(AbstractLoadBalancerAwareClient.java:112)
at org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient.execute(LoadBalancerFeignClient.java:63)
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:98)
… 35 more
3、问题原因
feign.RetryableException: Error writing to server executing POST,参数过长,导致执行出错
二、@RequestBody和@RequestParam
1、@RequestParam、@RequestBody的作用
1)前言
在SpringMvc后台进行获取数据,一般有三种:
1.request.getParameter(“参数名”)
2.用@RequestParam注解获取
3.Springmvc默认支持的数据类型接收参数,可直接通过controller方法参数对应jsp中请求参数name直接获取
2)作用
简单一点说,@RequestBody和@RequestParam作用就是把请求中的指定名称的参数传递给控制器中的形参赋值
2、两个注解的区别
| 区别 | @RequestParam | @RequestBody |
|---|---|---|
| 参数来源 | 接收的参数是来自requestHeader中,即请求头 | 接收的参数是来自requestBody中,即请求体 |
| Content-Type编码格式 | application/x-www-form-urlencoded | 非 Content-Type: application/x-www-form-urlencoded编码格式的数据,比如:application/json、application/xml等类型的数据 |
| 适用的请求方式 | GET | GET、POST |
本文解析了Feign接口调用中因参数过长导致的错误,详细介绍了错误发生的原因及解决思路,并对比了@RequestParam与@RequestBody注解的使用场景和区别。
3416

被折叠的 条评论
为什么被折叠?



