当前位置:首页 > 科技  > 软件

基于注解的Controller接口这些高级功能你都知道吗?

来源: 责编: 时间:2024-04-28 08:57:56 272观看
导读环境:SpringBoot2.7.181. 简介基于注解的Controller接口,你可以使用 @RequestMapping 注解将请求映射到控制器方法。它有多种属性,可根据 URL、HTTP 方法、请求参数、头和媒体类型进行匹配。该注解可以在类上使用它来表

环境:SpringBoot2.7.18T7Q28资讯网——每日最新资讯28at.com

1. 简介

基于注解的Controller接口,你可以使用 @RequestMapping 注解将请求映射到控制器方法。它有多种属性,可根据 URL、HTTP 方法、请求参数、头和媒体类型进行匹配。该注解可以在类上使用它来表达共享映射,也可以在方法级使用它来缩小特定接口映射的范围。T7Q28资讯网——每日最新资讯28at.com

@RequestMapping 还有 HTTP 方法特定的快捷方式变体:T7Q28资讯网——每日最新资讯28at.com

  • @GetMapping
  • @PostMapping
  • @PutMapping
  • @DeleteMapping
  • @PatchMapping

通过上面的注解,我们能更加具体的去匹配我们的Controller接口方法。这些注解在开发中都是些基本的操作,并且在绝大多数情况下使用这些接口完全够用了。接下来将介绍几个高级用法。T7Q28资讯网——每日最新资讯28at.com

2. 实战案例

2.1 HEAD、OPTIONS请求

对于head,options请求Spring并没有提供对应的快捷注解,我们只能通过@RequestMapping注解来指定method属性。T7Q28资讯网——每日最新资讯28at.com

@GetMapping (和 @RequestMapping(method=HttpMethod.GET))支持 HTTP HEAD 透明请求映射。控制器方法无需更改。在 javax.servlet.http.HttpServlet 中应用的响应封装器可确保 Content-Length 标头被设置为写入的字节数(而不会实际写入响应)。如下示例:T7Q28资讯网——每日最新资讯28at.com

@GetMapping("/h")public Object h() {  System.out.println("header....") ;  return "h method..." ;}

当上面的接口以head方式请求时,也是可以成功进入该方法的只是并不会输出内容到客户端,而仅仅是通过Content-Leng告知有多少个字节内容。T7Q28资讯网——每日最新资讯28at.com

图片图片T7Q28资讯网——每日最新资讯28at.com

响应header中有Content-LengthT7Q28资讯网——每日最新资讯28at.com

图片图片T7Q28资讯网——每日最新资讯28at.com

对应HEAD请求我们完全可以通过GET方式来解决。T7Q28资讯网——每日最新资讯28at.com

默认情况下,HTTP OPTIONS 的处理方式是将 Allow 响应头设置为具有匹配 URL 模式的所有 @RequestMapping 方法中列出的 HTTP 方法列表。简单说当你通过OPTIONS请求一个URL时,Allow的响应头会设置为你@RequestMapping(method = ...)这里你method设置的列表+OPTIONS,如下示例:T7Q28资讯网——每日最新资讯28at.com

@RequestMapping(value = "/o", method = {RequestMethod.DELETE, RequestMethod.HEAD})public Object o() {  System.out.println("o....") ;  return "h method..." ;}

当上面的接口通过OPTIONS请求时,那么响应header Allow将设置为如下:T7Q28资讯网——每日最新资讯28at.com

图片图片T7Q28资讯网——每日最新资讯28at.com

如果你的@RequestMapping没有指定method属性值,那么Allow 头信息会被设置为 GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS。上面的即可删除method属性再次请求如下:T7Q28资讯网——每日最新资讯28at.com

图片图片T7Q28资讯网——每日最新资讯28at.com

2.2 自定义请求注解

在某些场景下你可能需要自定义自己的一些注解来配置通用的匹配模式,那么这时候通过自定义请求注解的方式是非常合适的,而不用你对每一个请求都去做重复的事。T7Q28资讯网——每日最新资讯28at.com

自定义请求注解T7Q28资讯网——每日最新资讯28at.com

@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documented@RequestMappingpublic @interface PackMapping { @AliasFor(annotation = RequestMapping.class) String name() default ""; @AliasFor(annotation = RequestMapping.class) String[] value() default {}; @AliasFor(annotation = RequestMapping.class) // 配置只能是GET或POST方法 RequestMethod[] method() default {RequestMethod.GET, RequestMethod.POST} ; @AliasFor(annotation = RequestMapping.class) String[] path() default {}; @AliasFor(annotation = RequestMapping.class) String[] params() default {}; // 设置请求header必须包含X-API-Version并且值必须是v1 @AliasFor(annotation = RequestMapping.class) String[] headers() default {"X-API-Versinotallow=v1"}; @AliasFor(annotation = RequestMapping.class) String[] consumes() default {}; @AliasFor(annotation = RequestMapping.class) String[] produces() default {};}

测试Controller接口T7Q28资讯网——每日最新资讯28at.com

@PackMapping("/v")public Object v() {  System.out.println("自定义请求注解....") ;  return "PackMapping method..." ;}

输出结果T7Q28资讯网——每日最新资讯28at.com

图片图片T7Q28资讯网——每日最新资讯28at.com

请求中必须携带X-API-Version请求header。T7Q28资讯网——每日最新资讯28at.com

2.3 动态显示注册接口

你可以通过编程方式注册处理程序方法,这些方法可以用于动态注册或高级情况,例如不同URL下的同一处理程序的不同实例,如下示例:T7Q28资讯网——每日最新资讯28at.com

@Configurationpublic class CustomWebConfig {  @Autowired  public void setHandlerMapping(RequestMappingHandlerMapping mapping, UserService handler)      throws NoSuchMethodException {    BuilderConfiguration options = new BuilderConfiguration() ;    options.setPatternParser(new PathPatternParser()) ;    RequestMappingInfo info = RequestMappingInfo.paths("/api/user/{id}").methods(RequestMethod.GET).options(options ).build();    Method method = UserHandler.class.getMethod("getUser", Integer.class) ;    mapping.registerMapping(info, handler, method);  }}

UserServiceT7Q28资讯网——每日最新资讯28at.com

@Componentpublic class UserHandler {    @ResponseBody  public User getUser(@PathVairable("id")Integer id) {    User user = new User() ;    user.setId(id) ;    user.setName("张三") ;    return user ;  }}

输出结果T7Q28资讯网——每日最新资讯28at.com

图片图片T7Q28资讯网——每日最新资讯28at.com

以上是本篇文章的全部内容,如对你有帮助就请作者吃个棒棒糖

本文链接:http://www.28at.com/showinfo-26-86065-0.html基于注解的Controller接口这些高级功能你都知道吗?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 浅析ServiceMesh和Istio,你学会了吗?

下一篇: C#队列(Queue)的基本使用,一文全掌握

标签:
  • 热门焦点
  • K60至尊版刚预热 一加Ace2 Pro正面硬刚

    Redmi这边刚如火如荼的宣传了K60 Ultra的各种技术和硬件配置,作为竞品的一加也坐不住了。一加中国区总裁李杰发布了两条微博,表示在自家的一加Ace2上早就已经采用了和PixelWo
  • 小米官宣:2023年上半年出货量中国第一!

    今日早间,小米电视官方微博带来消息,称2023年小米电视上半年出货量达到了中国第一,同时还表示小米电视的巨屏风暴即将开始。“公布一个好消息2023年#小米电视上半年出货量中国
  • 六大权益!华为8月服务日开启:手机免费贴膜、维修免人工费

    8月5日消息,一年一度的华为开发者大会2023(Together)日前在松山湖拉开帷幕,与此同时,华为8月服务日也式开启,到店可享六大专属权益。华为用户可在华为商城Ap
  • 三言两语说透设计模式的艺术-简单工厂模式

    一、写在前面工厂模式是最常见的一种创建型设计模式,通常说的工厂模式指的是工厂方法模式,是使用频率最高的工厂模式。简单工厂模式又称为静态工厂方法模式,不属于GoF 23种设计
  • 服务存储设计模式:Cache-Aside模式

    Cache-Aside模式一种常用的缓存方式,通常是把数据从主存储加载到KV缓存中,加速后续的访问。在存在重复度的场景,Cache-Aside可以提升服务性能,降低底层存储的压力,缺点是缓存和底
  • 十个简单但很有用的Python装饰器

    装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用
  • 为什么你不应该使用Div作为可点击元素

    按钮是为任何网络应用程序提供交互性的最常见方式。但我们经常倾向于使用其他HTML元素,如 div span 等作为 clickable 元素。但通过这样做,我们错过了许多内置浏览器的功能。
  • 2299元起!iQOO Pad明晚首销:性能最强天玑平板

    5月23日,iQOO如期举行了新品发布会,除了首发安卓最强旗舰处理器的iQOO Neo8系列新机外,还在发布会上推出了旗下首款平板电脑——iQOO Pad,其最大的卖点
  • iQOO Neo8 Pro真机谍照曝光:天玑9200+和V1+旗舰双芯加持

    去年10月,iQOO推出了iQOO Neo7系列机型,不仅搭载了天玑9000+,而且是同价位唯一一款天玑9000+直屏旗舰,一经上市便受到了用户的广泛关注。在时隔半年后,
Top