SpringCloud Alibaba - feign 接口注解解析规则 Contract

在Spring Cloud Alibaba的Feign组件中,接口的注解解析是通过Contract接口实现的,它定义了如何解析接口定义中的注解,将其转换为Feign可以理解的请求模板。默认情况下,Feign使用的是SpringMvcContract,该实现与Spring MVC的注解紧密集成,支持如@RequestMapping@GetMapping@PostMapping等标准Spring MVC注解。

SpringMvcContract解析规则

SpringMvcContract遵循以下基本规则来解析Feign接口上的注解:

  1. 接口级别的注解:如@RequestMapping,用于设置整个接口的基础URL路径。例如:

    @RequestMapping("api/v1/users")
    public interface UserService {
        // ...
    

    这里的api/v1/users会作为所有接口方法的基础路径。

  2. 方法级别的注解:如@GetMapping@PostMapping等,用于指定HTTP方法和进一步细化的路径。这些注解覆盖或附加到接口级别的路径上。例如:

    @GetMapping("/{id}")
    User getUser(@PathVariable("id") Long id);
    

    这里/api/v1/users/{id}会成为实际请求的URL。

  3. 参数注解:如@PathVariable@RequestParam@RequestBody等,用于指示如何处理方法参数。这些注解告诉Feign如何将参数值映射到URL路径片段、查询参数或请求体中。

  4. Header注解:如@RequestHeader,用于设置HTTP头信息。

  5. 其他Spring MVC注解:包括@MatrixVariable@CookieValue@RequestAttribute等,提供了更多处理请求细节的能力。

自定义Contract

如果需要改变默认的注解解析行为,可以自定义Contract实现。这在需要支持非Spring MVC注解或者有特殊需求时特别有用。自定义的Contract可以通过Feign的Builder配置到Feign客户端中。

示例

假设我们有以下接口定义:

@FeignClient(name = "userService", url = "http://localhost:8080")
public interface UserService {

    @GetMapping("/users/{id}")
    User getUserById(@PathVariable("id") Long id);

    @PostMapping("/users")
    User createUser(@RequestBody User user);
}

在这个例子中,SpringMvcContract会识别出@GetMapping@PathVariable等注解,并据此构建HTTP GET请求到http://localhost:8080/users/{id},以及识别@PostMapping@RequestBody注解来构建创建用户的POST请求。

了解这些规则有助于开发者有效地设计和使用Feign接口,确保服务间的通信符合预期。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值