Younghae
Younghae
2019-11-09 17:06
采纳率: 42.9%
浏览 2.4k
已采纳

微服务调用服务时候传递参数问题

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中?

如果建议传递字符类型的参数,通过字符类型获取这样方法就不用了,暂时不想这样改。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • caozhy
    已采纳

    遍历request,再依次把参数添加到第二个请求,发过去

    遍历的代码:
    https://blog.csdn.net/qq_15204179/article/details/84988565

    点赞 评论
  • weixin_38342534
    会飞的基德 2019-11-10 02:22

    刚刚试了一下,在下才疏学浅,发表一下自己的见解。
    首先,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中的参数即可。

    点赞 评论

相关推荐