HTTP(超文本传输协议)中的 GET 请求是一种从服务器获取数据的请求方法。它是最常用的 HTTP 请求方法之一,主要用于向服务器请求资源,这些资源可以是网页、图片、文件等各种数据。
@GetMapping是 Spring 框架中的一个注解,用于将 HTTP GET 请求映射到特定的处理方法上。它是 @RequestMapping(method=RequestMethod.GET) 的缩写,使得在编写 RESTful API 端点或者调用外部服务(在 OpenFeign 中)时更加简洁和方便。
注意:完整代码请参考 Spring Cloud OpenFeign 入门示例。
服务端代码:
@GetMapping("/hello") public String hello(HttpServletRequest request) { return "Hello World"; }
定义Feign客户端:
@GetMapping("/simple/hello") String get();
调用Feign客户端:
@GetMapping("/get1") public String get1() { return simpleFeign.get(); }
调用结果:
服务端代码:
@GetMapping("/get") public String get(@RequestParam("id") Long id) { return "appName=" + appName + " appPort=" + appPort + " id=" + id; }
定义Feign客户端:
@GetMapping("/simple/get") String get(@RequestParam("id") Long id);
调用Feign客户端:
@GetMapping("/get2") public String get2(@RequestParam("id") Long id) { return simpleFeign.get(id); }
调用结果:
服务端代码:
// GET 请求,根据用户 ID 获取用户信息 @GetMapping("/getUserById") public CommonReturn<User> getUserById(@RequestParam("id") Long id) { log.info("getUserById() id={}", id); return USERS.stream() .filter(user -> user.getId().equals(id)) .findFirst() .map(u -> CommonReturn.success(u).ext(appName, appPort)) .orElse(CommonReturn.fail("用户不存在")); }
定义Feign客户端:
@GetMapping("/user/getUserById") CommonReturn<User> getUserById(@RequestParam("id") Long id);
调用Feign客户端:
@GetMapping("/getUserById") public CommonReturn<User> getUserById(@RequestParam("id") Long id) { return userFeign.getUserById(id); }
调用结果:
路径变量是通过 @PathVariable 注解来处理的。在服务提供方和 OpenFeign 客户端的接口方法中,路径变量的名称和位置都需要保持一致。如果路径中有多个变量,例如 /books/{bookId}/chapters/{chapterId},可以这样定义:
// 服务提供方 @GetMapping("/books/{bookId}/chapters/{chapterId}") public String getChapter(@PathVariable("bookId") String bookId, @PathVariable("chapterId") String chapterId) { // 业务逻辑 return ""; } // OpenFeign 客户端 @GetMapping("/books/{bookId}/chapters/{chapterId}") String getChapter(@PathVariable("bookId") String bookId, @PathVariable("chapterId") String chapterId);
除了路径变量,GET 请求还经常使用请求参数。例如,获取某一类型的图书列表,接口路径可能是/ books?type=fiction。在服务提供方可以这样写:
// 服务提供方 @GetMapping("/books") public List<String> getBooksByType(@RequestParam("type") String type) { List<String> result = new ArrayList<>(); // 根据type筛选books并添加到result return result; } // OpenFeign 客户端 @GetMapping("/books") List<String> getBooksByType(@RequestParam("type") String type);
在 OpenFeign 中,服务调用方接口方法的返回值类型应该和服务提供方对应方法的返回值类型在逻辑上是匹配的。
例如,如果服务提供方返回一个 JSON 格式的数据(如 Book 对象),服务调用方接口方法也应该能够接收和处理这个 JSON 数据对应的 Java 对象(假设已经配置了合适的 JSON 序列化和反序列化机制)。
如果服务提供方返回一个简单的字符串或者数值,服务调用方也应该相应地定义匹配的返回值类型。