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

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

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

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

1. 简介

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

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

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

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

2. 实战案例

2.1 HEAD、OPTIONS请求

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2.2 自定义请求注解

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

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

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

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

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

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

2.3 动态显示注册接口

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

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

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 卢伟冰长文解析K60至尊版 对Redmi有着里程碑式的意义

    在今天的Redmi后性能时代战略发布会结束之后,Redmi总经理卢伟冰又带来了一篇长文,详解了为什么 Redmi 要开启后性能时代?为什么选择和 MediaTek、Pixelworks 深度合作?以及后性
  • 《英雄联盟》夏季赛总决赛今日开打!JDG对阵LNG首发名单来了 Knight:准备三连冠

    8月5日消息,今日17:00,《英雄联盟》2023LPL夏季赛总决赛将正式开打,由JDG对阵LNG。对两支队伍来说,这场比赛不仅要争夺夏季赛冠军,更要决定谁才是LPL赛区一
  • 企业采用CRM系统的11个好处

    客户关系管理(CRM)软件可以为企业提供很多的好处,从客户保留到提高生产力。  CRM软件用于企业收集客户互动,以改善客户体验和满意度。  CRM软件市场规模如今超过580
  • 之家push系统迭代之路

    前言在这个信息爆炸的互联网时代,能够及时准确获取信息是当今社会要解决的关键问题之一。随着之家用户体量和内容规模的不断增大,传统的靠"主动拉"获取信息的方式已不能满足用
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • ESG的面子与里子

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之三伏大幕拉起,各地高温预警不绝,但处于厄尔尼诺大“烤”之下的除了众生,还有各大企业发布的ESG报告。ESG是“环境保
  • 微博大门常打开,迎接海外画师漂洋东渡

    作者:互联网那些事“起猛了,我能看得懂日语了”。“为什么日本人说话我能听懂?”“中文不像中文,日语不像日语,但是我竟然看懂了”…&hell
  • 三星折叠屏手机去年销售近1000万台 今年目标定为1500万

    7月29日消息,三星率先发力可折叠手机市场,在全球市场已经取得了非常亮眼的成绩,接下来会进一步巩固和扩大这一优势。三星在推出Galaxy Z Flip5和Galax
  • 苹果MacBook Pro 2021测试:仍不支持平滑滚动

    据10月30日9to5 Mac 消息报道,苹果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后获得了不错的评价,亮点包括行业领先的性能,令人印象深刻的电池续航,精美丰
Top