A服务是客户端 Feign方式写了一个接口,接口参数是request
如(大概是这样的):
public String getName(HttpServletRequest request)
B服务是一个微服务。有一个controller映射上面的接口
如
public String getName(HttpServletRequest request)
A客户端可以正常请求B服务,但是在B服务的getName中无法获取客户端request中的属性,都是空的,有什么办法能获取吗?
或者我在A客户端方法中怎么写能把A客户端服务request中的属性原封不动的copy到B服务的request中?
如果建议传递字符类型的参数,通过字符类型获取这样方法就不用了,暂时不想这样改。
遍历request,再依次把参数添加到第二个请求,发过去
遍历的代码:
https://blog.csdn.net/qq_15204179/article/details/84988565
刚刚试了一下,在下才疏学浅,发表一下自己的见解。
首先,HttpServletRequest属于server层面的东西,具体要看容器的实现,tomcat、jetty
HttpServletRequest的实现类均无序列化,所以都不能作为参数进行传递。
首先要解决序列化问题,我的想法是自己写一个Request类继承父类org.eclipse.jetty.server.Request,但强转及其他方式都失败了。
其次,Feign要求发送方法和接受方法的参数必须一致,所以,必须要解决序列化问题才能接受到参数。
针对楼主的问题,给出以下两种解决方案
1、楼主担心的应该是参数不固定问题,若以后添加参数又要修改接口,麻烦。可以采用json/或map方式,这跟使用request是一样的,只不过采用了json。
2、一定要用request,看题干,楼主好像能将request作为参数进行传递,我测试不行(序列化问题),若能接受到,那可以采用以下方式取参数:
客户端传递request到服务端是作为参数传递的,使用服务端的requestgetParameter("request")(这个名字是你的参数名) 先将客户端的request取出,然后再获取客户端request中的参数即可。