zoukankan      html  css  js  c++  java
  • SpringCloud 中 Feign 调用使用总结

    最近做微服务架构的项目,在用 feign 来进行服务间的调用。在互调的过程中,难免出现问题,根据错误总结了一下,主要是请求方式的错误和接参数的错误造成的。在此进行一下总结记录。
    以下通过分为三种情况说明,无参数,单参数,多参数。
    每种情况再分 get 和 post 两种请求方式进行说明。这样的话,6 种情况涵盖了 feign 调用的所有情况。
    有个建议就是为了保证不必要的麻烦,在写 feign 接口的时候,与我们的映射方法保持绝对一致,同时请求方式,请求参数注解也都不偷懒的写上。如果遵循这种规范,可以避开 90% 的调用错误。

    无参情况

    无参情况就是说我们的方法内不接收参数。

    Get 请求

    当我们只写 RequestMapping,而不指定 RequestMethod 的时候。默认的 method 为一个 get 请求。

    @RequestMapping("/noArgs/getDemo")
    public void noArgsGetDemo();
    

    Post 请求

    @RequestMapping(value = "/noArgs/postDemo",method = RequestMethod.POST)
    public void noArgsPostDemo();
    

    也可以直接使用 PostMapping

    @PostMapping(value = "/noArgs/postDemo")
    public void noArgsPostDemo();
    

    单参

    方法内只有一个参数

    Get 请求

    get 请求方式接参,只能使用 RequestParam 注解

    @RequestMapping(value = "/singleArg/getDemo")
    public void singleArgGetDemo(@RequestParam String name);
    

    不写 RequestMethod 注解,默认就是 get 请求。

    Post 请求

    post 请求方式接参,可以使用三种方式,一种是不写,一种是 RequestParam,一种是 RequestBody。

    RequestParam

    先说说 RequestParam 这种方式。需要指明 method,如果不指明则和上方一样了。默认是 get。

    @RequestMapping(value = "/singleArg/PostDemo",method = RequestMethod.POST)
    public void singleArgPostDemo(@RequestParam String name);
    
    RequestBody

    一旦使用 RequestBody 这种方式,他就是 post 请求,不用写 method 了。

    @RequestMapping(value = "/singleArg/PostDemo")
    public void singleArgPostDemo(@RequestBody String name);
    

    这个注解就很强势了,你写 post,不写或者写 get 都没用,不会生效的,只要有这个方式那他就是 Post 请求了。

    啥也不写
    @RequestMapping(value = "/singleArg/PostDemo")
    public void singleArgPostDemo(String name);
    

    此时默认会在参数前加上 RequestBody 注解。然后就会变成 Post 请求。

    多参

    get 请求

    多个参数也是使用 @RequestParam 注解。

    @RequestMapping(value = "/moreArgs/getDemo")
    public void moreArgGetDemo(@RequestParam String name,@RequestParam String sex);
    

    使用了 RequestParam 注解,默认 method 就是 get。

    post 请求

    多个参数只能有一个是 requestBody 方式,其他应该使用 requestParam 方式。

    @RequestMapping(value = "/moreArgs/postDemo")
    public void moreArgPostDemo(@RequestBody String name,@RequestParam String sex);
    

    也可以全部使用 RequestParam 方式,但是要指定 post。

    @RequestMapping(value = "/moreArgs/postDemo",method = RequestMethod.POST)
    public void moreArgPostDemo(@RequestParam String name,@RequestParam String sex);
    

    如果要是参数前,都没写注解,则会报错,因为会默认加上两个 RequestBody。

  • 相关阅读:
    Android 在资源文件(res/strings.xml)定义一维数组,间接定义二维数组
    Android 设计模式之MVC模式
    Android Studio 1.0首次安装遇到的问题,无法下载SDK
    android 项目中规范使用SharedPreferences
    Android 在布局容器中动态添加控件
    Android ble 蓝牙4.0 总结一
    Mac Android签名生成keystore
    Android ndk 加载简单的gif 图像
    Android EventBus
    c语言内存
  • 原文地址:https://www.cnblogs.com/asimov/p/13960865.html
Copyright © 2011-2022 走看看