【OpenFeign】 GET 示例

Metadata

title: 【OpenFeign】 GET 示例
date: 2023-01-02 19:42
tags:
  - 行动阶段/完成
  - 主题场景/组件
  - 笔记空间/KnowladgeSpace/ProgramSpace/ModuleSpace
  - 细化主题/Module/OpenFeign/示例
categories:
  - OpenFeign
keywords:
  - OpenFeign
description: 【OpenFeign】 GET 示例

【OpenFeign】 GET 示例

在向服务器获取资源时,一般使用 GET 请求,比如查询数据。

1. 没有参数

没有参数就很简单,只需要使用@GetMapping标识好请求路径就可以了。

@GetMapping("/noParam}")
    public List<Order> noParam();

2. 多个基础类型参数

Get 请求多个参数时,需要使用@RequestParam或者@PathVariable注解,这是因为在加载方法元数据的时候,如果该形参没有注解,默认会直接将其放在请求体中,这样 GET 请求时就会报错。

而且注解中的value属性必须指定绑定的参数名,不然会报错RequestParam.value() was empty on parameter 0
案例:

@GetMapping("insert")
    public List<Order> insertOrder(@RequestParam("accountId") Long accountId, @RequestParam("commodityCode") String commodityCode, @RequestParam("count") Long count, @RequestParam("money") Long money);

    @GetMapping("id/{id}")
    public List<Order> id(@PathVariable("id") String id);

4. 集合数据参数

在 Spring MVC 使用 GET 请求传递集合参数时,需要这么写:

@GetMapping("/noParam")
    public List<Order> noParam(@RequestParam(list) List<Long> list);

在请求时,URL 集合值使用逗号隔开:

http://localhost:9000/order/noParam?list=22,33,44

在使用 Feign 调用时,直接调用就可以了,可以从日志看到,Feign 自动将集合类型的参数进行了解析拼接。

5. 单个对象参数

当 Get 请求参数超过三个时,就需要进行查询参数封装为对象。

上面说到当参数没有注解时,就会放入到请求体中,但是@RequestParam不支持直接传递对象类,这时就需要使用@SpringQueryMap注解,它可以将对象属性及值,转为键值对拼接在 URL 后面。

@GetMapping("/get")
    public Order getOrder(@SpringQueryMap Order order);

日志如下:

6. 多个对象参数

多个对象参数时,只需要使用多个@SpringQueryMap即可:

@GetMapping("/get")
    public Order getOrder(@SpringQueryMap Order order,@SpringQueryMap Account account);

多个对象参数加基本类型参数时,只需要添加对应的注解即可,需要注意实体类中的属性和这个基础类型参数名不能相同,不然拼接到 URL 中,两个同名参数传递过去就会覆盖了。

@GetMapping("/get")
    public Order getOrder(@SpringQueryMap Order order,@RequestParam("accountId") Long accountId);

7. 下载文件

下载文件需要注意的是,应该返回二进制数据,还有 GET 请求时,需要对 URL 进行编码,不然会报错编码不符合规范,其他没什么区别。

@GetMapping("/download")
    public ResponseEntity<byte[]> download(@RequestParam("filePath") String filePath) ;