Spring MVC 核心注解

本文详细介绍了SpringMVC中的核心注解在SpringCloudFeign中的使用,如@RequestMapping、@GetMapping、@PostMapping等,并展示了如何在Feign接口中处理请求参数、路径变量和请求头,以及如何与SpringBoot的负载均衡和熔断机制配合。
摘要由CSDN通过智能技术生成

Spring MVC 核心注解

  1. @Controller

    • 用于标记一个类作为Spring MVC中的控制器,此类中包含处理HTTP请求的方法。
  2. @RequestMapping

    • 可以在类或方法级别使用,将特定的URL映射到处理请求的方法。
    • 属性包括:
      • valuepath: 指定请求的URI模板。
      • method: 指定HTTP请求方法(如GET、POST等)。
      • params: 指定请求必须包含的参数列表。
      • headers: 指定请求头信息过滤条件。
      • consumesproduces: 定义请求和响应的内容类型(MIME类型)。
  3. @GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping

    • 这些是@RequestMapping针对具体HTTP方法的快捷方式。
  4. @PathVariable

    • 用于从URI路径变量中获取值并注入到控制器方法参数中。
  5. @RequestParam

    • 绑定HTTP请求参数到控制器方法参数。
  6. @RequestBody

    • 将HTTP请求体内容反序列化为对象,并注入到控制器方法参数中。
  7. @RequestHeader

    • 从HTTP请求头中提取指定值并绑定到控制器方法参数。
  8. @CookieValue

    • 获取HTTP请求中的Cookie值并将其注入到控制器方法参数。
  9. @ModelAttribute

    • 在方法参数或方法上使用,表示该参数应由模型属性解析器填充或触发方法来准备模型数据。
  10. @SessionAttributes

    • 类级别的注解,声明将在HTTP会话中保存的模型属性名。
  11. @InitBinder

    • 标记在方法上,允许自定义数据绑定逻辑,在数据绑定到命令对象之前执行。
  12. @ExceptionHandler

    • 处理控制器方法抛出的异常,返回视图或错误响应。
  13. @RestController

    • 结合了@Controller@ResponseBody的功能,表明该控制器的所有方法都将直接返回HTTP响应体内容而非视图名。

请注意,实际开发中还存在其他辅助注解和功能性的注解,例如用于验证请求数据的JSR-303/JSR-349注解(如@NotNull, @Size等),以及处理跨域请求的@CrossOrigin注解等。

Spring Cloud Feign 中对 Spring MVC 注解的使用

在Spring Cloud Feign中,尽管Feign本身是一个独立的声明式HTTP客户端库,但它通过Spring Cloud的集成实现了对Spring MVC注解的良好支持。因此,可以在Feign接口的方法上使用部分Spring MVC注解来定义服务调用约定。

示例1 - 使用 @RequestMapping:

@FeignClient(name = "serviceA")
public interface ServiceAClient {

    @RequestMapping(method = RequestMethod.GET, value = "/api/data")
    DataResponse getData(@RequestParam("param1") String param1);
}

在此示例中,@RequestMapping用于映射到目标服务特定的URL路径(/api/data)及HTTP方法(GET),同时处理请求参数。

示例2 - 使用 @GetMapping, @PostMapping 等快捷方式注解:

@FeignClient(name = "serviceB")
public interface ServiceBClient {

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

    @PostMapping("/api/users", consumes = MediaType.APPLICATION_JSON_VALUE)
    User createUser(@RequestBody CreateUserRequest request);
}

示例3 - 使用 @RequestParam, @PathVariable, @RequestHeader:
这些Spring MVC注解在Feign接口中同样有效,用于处理请求参数、路径变量和请求头信息。

@FeignClient(name = "serviceD")
public interface ServiceDClient {

    // 使用 @RequestParam 注解处理查询参数
    @GetMapping("/api/search")
    SearchResponse search(@RequestParam("query") String query, 
                          @RequestParam(value = "page", required = false, defaultValue = "1") int page);

    // 使用 @PathVariable 注解处理路径变量
    @GetMapping("/api/users/{userId}/profile")
    UserProfile getUserProfile(@PathVariable("userId") Long userId);

    // 使用 @RequestHeader 注解处理请求头信息
    @PostMapping("/api/protected-resource")
    Response getProtectedResource(@RequestHeader("Authorization") String authorizationToken);
}

示例4 - 使用 @Headers:

@FeignClient(name = "serviceC")
public interface ServiceCClient {

    @GetMapping("/api/files")
    FileResource getFile(
        @RequestParam("fileId") String fileId,
        @RequestHeader("Authorization") String authorizationToken,
        @Headers("Accept: application/octet-stream")
    );
}

虽然@Headers并非Spring MVC标准注解,但在Feign中可以用来为请求添加固定的请求头信息。
总之,在Spring Cloud环境中,Feign与Ribbon或LoadBalancerClient配合实现负载均衡,并可通过Hystrix(如果启用)进行熔断保护。通过支持Spring MVC注解,编写Feign接口时能获得更加直观且易于理解的代码结构,从而更好地整合到Spring Boot应用体系中。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值