• 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。

    总结

    至此feign的请求方式就说明白了。

  • 相关阅读:
    首发Zend Studio 9.0.2正式版注册破解
    PHP 中Cookie和Session的使用
    PHP设计模式职责和单例模式
    软件工程工具学习(1)Visio
    java复习(4)数字处理类
    java复习(1)java与C++区别
    微信开发(1)微信防撤回功能实现
    java复习(3)字符串、数组
    java复习(2)java基础杂记
    java复习(5)接口、继承、多态
  • 原文地址:https://www.cnblogs.com/jichi/p/11742136.html
Copyright © 2020-2023  润新知