首页> 中国专利> 基于Fegin传递Form表单参数的方法

基于Fegin传递Form表单参数的方法

摘要

本发明涉及基于Fegin传递Form表单参数的方法,包括步骤:重写原生的SpringEncoder父类的encoder方法;判断原生的encoder父类方法中的对象参数requestbody是否为上传文件类实例或者header中是否包含@RequestBody的注解,若是,则FeginClien请求调用原生的encoder方法,否则将Request请求体的参数和Request请求Url中的参数合并为queries;将参数queries转换为支持Form的表单形式在FeignClient调用时传递。本发明的目的在于针对已有的Form形式的表单参数也能通过FeginClient调用并传递。

著录项

  • 公开/公告号CN114925301A

    专利类型发明专利

  • 公开/公告日2022-08-19

    原文格式PDF

  • 申请/专利权人 北京结慧科技有限公司;

    申请/专利号CN202210656901.0

  • 申请日2022-06-10

  • 分类号G06F16/955(2019.01);G06F9/54(2006.01);

  • 代理机构北京市领专知识产权代理有限公司 11590;

  • 代理人潘镜如

  • 地址 100144 北京市石景山区实兴大街30号院3号楼2层A-1151房间(集群注册)

  • 入库时间 2023-06-19 16:26:56

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-09-06

    实质审查的生效 IPC(主分类):G06F16/955 专利申请号:2022106569010 申请日:20220610

    实质审查的生效

说明书

技术领域

本发明涉及参数调用技术领域,特别涉及一种基于微服务调用FeginClient调用时可传递Form表单参数的方法。

背景技术

自Spring MVC中Controller中复杂类型的参数如果不加@RequestBody注解的话,是可以接收表单参数的,但FeginClient并不支持这个特性,比如Json类型参数、Form类型参数,如果不加注解@RequestBody时,则可以传递Json类型参数,但不能传递Form类型参数,因为FeginClient并不支持Form类型参数的项目传递。那么对于众多已有的项目,且已设置为Form类型参数的项目在转换为FeignClient调用传递时就会很麻烦。

发明内容

本发明的目的在于针对已有的Form形式的表单参数也能通过FeginClient调用并传递,提供一种基于Fegin传递Form表单参数的方法。

为了实现上述发明目的,本发明实施例提供了以下技术方案:

基于Fegin传递Form表单参数的方法,包括以下步骤:

步骤S1,重写原生的SpringEncoder父类的encoder方法;

步骤S2,判断原生的encoder父类方法中的对象参数requestbody是否为上传文件类实例或者header中是否包含@RequestBody的注解,若是,则FeginClien请求调用原生的encoder方法,否则进入步骤S3;

步骤S3,将Request请求体的参数和Request请求Url中的参数合并为queries;

步骤S4,判断当前Request请求类型,将参数queries转换为支持Form的表单形式在FeignClient调用时传递。

在上述方案中,原始传递的参数常见的有Json类型、Form类型、地址参数等,当FeginClien传递某一参数时,重写一个encoder方法,判断原始传递的参数的类型,如果是FeginClien可以支持的类型参数,则FeginClien直接调用传递,如果不是FeginClien支持的类型参数,则将参数转换为FeginClien支持Form表单形式,从而在FeignClient调用时传递。

更进一步地,所述步骤S1具体包括以下步骤:自定义一个encoder子类继承SpringEncoder父类,重写原生的encoder方法,使得自定义的encoder子类方法覆盖原生的encoder父类方法。

更进一步地,所述步骤S3具体包括以下步骤:将Request请求体的参数requestbody以反射的形式提取封装为Map对象,即queries1,再将Request请求体的Url路径请求参数提取为request.queries,即queries2;将queries1和queries2合并为queries。

更进一步地,所述步骤S4具体包括以下步骤:判断当前Request请求类型,若为Post类型,则将合并后的参数qureies以&符号拼接赋值给request的body对象,并将request的请求类型设置为application/x-www-form-urlencoded;若为非Post类型,则将合并的queries赋值给request的queries属性,使得FeignClient支持Form表单参数的传递形式。

与现有技术相比,本发明的有益效果:

使用本发明方案后,通过FeginClient可以支持Form形式的表单参数调用和传递,对于一些已编码为Form形式的老项目和不想使用Json形式传输表单参数的项目来说,则将其转化为FeginClient可调用并传递的形式,更加符合Spring MVC中接收参数的思想,更加灵活。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本发明实施例方法流程图。

具体实施方式

下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性,或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。

实施例1:

示例代码:

public class SupportPojoParameterEncoder extends SpringEncoder {

@Override

public void encode(Object requestBody, Type bodyType, RequestTemplaterequest) throws EncodeException {

//方法体

}

}

本发明通过下述技术方案实现,如图1所示,基于Fegin传递Form表单参数的方法,包括以下步骤:

步骤S1,重写原生的SpringEncoder父类的encoder方法。

自定义一个encoder子类继承SpringEncoder,重写encoder方法,使得自定义的encoder子类方法覆盖原有的encoder父类方法,当FeginClient调用时可以按照自定义的encoder方法来编码,如上述示例代码。

步骤S2,判断原生的encoder父类方法中的对象参数requestbody是否为上传文件类实例或者header中是否包含@RequestBody的注解,若是,则FeginClien请求调用原生的encoder方法,否则进入步骤S3。

判断原生的encoder父类方法中的对象参数requestbody是否为上传文件类实例,比如为Json形式表单,如果是的话,则FeginClient直接调用原生的encoder父类方法。

或者判断当前请求中的header中是否包含@Requestbody的注解,如果包含的话,则FeginClient直接调用原有的encoder父类方法。

但如果原生的encoder父类方法中的对象参数requestbody既不是上传文件类实例,header中也不包含@Requestbody的注解,则说明当前请求不能直接调用原生的encoder父类方法,则进入步骤S3,需要对自定义的encoder方法进行编码,使得FeignClient请求传参时支持Form表单形式的传输。

作为举例,当客户端A调用提供者B的一个接口方法add1时,该接口方法add1定义为:

@PostMapping("/a")

Object add1 (@RequestBody UserAddAndUpdateForm user);

该接口方法add1是包含了@Requestbody注解的,所以客户端A使用FeginClient调用提供者B的add1时,原有的encoder父类是可以直接被调用的。

但是当客户端A调用提供者B的另一个接口方法add2时,该接口方法add2定义为:

@PostMapping("/b")

Object add2(UserAddAndUpdateForm user);

该接口方法add2是没有包含@Requestbody注解的,所以客户端A使用FeginClient调用提供者B的add2时,由于FeginClient的参数是以Json形式的数据格式传输,而add2是Form形式的表单参数,因此与FeginClient的格式不匹配,在调用时会报错失败。

步骤S3,将Request请求体的参数和Request请求Url中的参数合并为queries。

将Request请求体的参数requestbody以反射的形式提取封装为Map对象,即queries1,再将Request请求体的Url路径请求参数提取为request.queries,即queries2;将queries1和queries2合并为queries。

步骤S4,判断当前Request请求类型,将参数queries转换为支持Form的表单形式在FeignClient调用时传递。

若为Post类型,则将合并后的参数qureies以“&”符号拼接赋值给request的body对象,如“queries1&queries2”,并将request的请求类型设置为application/x-www-form-urlencoded。

若为非Post类型,则将合并的queries赋值给request的queries属性,使得FeignClient支持Form表单参数的传递形式。

在步骤S2中举出的例子使用本方案后,客户端A通过FeginClient发出调用后,通过自定义的encoder方法支持将请求参数转换为支持Form形式的表单参数在FeignClient调用时传递。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号