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

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

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

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

1. 简介

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

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

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

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

2. 实战案例

2.1 HEAD、OPTIONS请求

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2.2 自定义请求注解

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

自定义请求注解Nke28资讯网——每日最新资讯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接口Nke28资讯网——每日最新资讯28at.com

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

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

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

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

2.3 动态显示注册接口

你可以通过编程方式注册处理程序方法,这些方法可以用于动态注册或高级情况,例如不同URL下的同一处理程序的不同实例,如下示例:Nke28资讯网——每日最新资讯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);  }}

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

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 天猫精灵Sound Pro体验:智能音箱没有音质?来听听我的

    这几年除了手机作为智能生活终端最主要的核心之外,第二个可以成为中心点的产品是什么?——是智能音箱。 手机在执行命令的时候有两种操作方式,手和智能语音助手,而智能音箱只
  • 三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • 谷歌KDD'23工作:如何提升推荐系统Ranking模型训练稳定性

    谷歌在KDD 2023发表了一篇工作,探索了推荐系统ranking模型的训练稳定性问题,分析了造成训练稳定性存在问题的潜在原因,以及现有的一些提升模型稳定性方法的不足,并提出了一种新
  • 使用LLM插件从命令行访问Llama 2

    最近的一个大新闻是Meta AI推出了新的开源授权的大型语言模型Llama 2。这是一项非常重要的进展:Llama 2可免费用于研究和商业用途。(几小时前,swyy发现它已从LLaMA 2更名为Lla
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • 中国家电海外掘金正当时|出海专题

    作者|吴南南编辑|胡展嘉运营|陈佳慧出品|零态LT(ID:LingTai_LT)2023年,出海市场战况空前,中国创业者在海外纷纷摩拳擦掌,以期能够把中国的商业模式、创业理念、战略打法输出海外,他们依
  • 一条抖音4亿人围观 ! 这家MCN比无忧传媒还野

    作者:Hiu 来源:互联网品牌官01 擦边少女空降热搜,幕后推手曝光被网友誉为“纯欲天花板”的女网红井川里予,近期因为一组哥特风照片登上热搜,引发了一场互联网世界关于
  • 荣耀Magicbook V 14 2021曙光蓝版本正式开售,拥有触摸屏

    荣耀 Magicbook V 14 2021 曙光蓝版本正式开售,搭载 i7-11390H 处理器与 MX450 显卡,配备 16GB 内存与 512GB SSD,重 1.48kg,厚 14.5mm,具有 1.5mm 键盘键程、
  • 微软发布Windows 11新版 引入全新任务栏状态

    近日,微软发布了Windows 11新版,而Build 22563更新主要引入了几周前曝光的平板模式任务栏等,系统更流畅了。更新中,Windows 11加入了专门针对平板优化的任务栏
Top