首页 > 其他分享 >注解介绍

注解介绍

时间:2023-05-18 20:15:06浏览次数:19  
标签:String 映射 请求 介绍 user 注解 login RequestMapping

 

@RequestMapping

1.介绍

在Spring MVC 中使用 @RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,相当于Servlet中在web.xml中配置

<servlet>
    <servlet-name>servletName</servlet-name>
    <servlet-class>ServletClass</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>servletName</servlet-name>
    <url-pattern>url</url-pattern>
</servlet-mapping>

的映射作用一致。让我们先看一下RequestMapping注解类的源码:

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
    String name() default "";
    String[] value() default {};
    String[] path() default {};
    RequestMethod[] method() default {};
    String[] params() default {};
    String[] headers() default {};
    String[] consumes() default {};
    String[] produces() default {};
}

1)在@Target中有两个属性,分别为 ElementType.METHOD 和 ElementType.TYPE ,也就是说 @RequestMapping 可以在方法和类的声明中使用

2)可以看到注解中的属性除了 name() 返回的字符串,其它的方法均返回数组,也就是可以定义多个属性值,例如 value() 和 path() 都可以同时定义多个字符串值来接收多个URL请求

2.基础

@RequestMapping 用于将任意HTTP 请求映射到控制器方法上。

  • @RequestMapping表示共享映射,如果没有指定请求方式,将接收GET、POST、HEAD、OPTIONS、PUT、PATCH、DELETE、TRACE、CONNECT所有的HTTP请求方式
  • @GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping 都是HTTP方法特有的快捷方式@RequestMapping的变体,分别对应具体的HTTP请求方式的映射注解。

@RequestMapping 注解可以在控制器类上和控制器类中的方法上使用。

在类的级别上的注解会将一个特定请求或者请求模式映射到一个控制器之上。之后你还可以另外添加方法级别的注解来进一步指定到处理方法的映射关系。

需要注意的是,控制器方法都应该映射到一个特定的HTTP方法,而不是使用@RequestMapping共享映射。

3.使用

@RestController
public class UserController {
        // 映射到方法上
        // localhost:8080/user/login
        // 此处通常用 @GetMapping("/user/login") 表明GET请求方式的映射,因为login登录只需向服务器获取用户数据。
    @RequestMapping("/user/login")  
    public String login() {
        return "user login";
    }
    
    // 映射到方法上
    // localhost:8080/user/register
    // 此处通常用 @PostMapping("/user/login") 表明POST请求方式的映射,因为register注册需要向服务器提交用户数据。
    @RequestMapping("/user/register")
    public String register() {
        return "user register";
    }
}

如上述代码所示,到 /user/login 的请求会由 login() 方法来处理,而到 /user/register的请求会由 register() 来处理。

下面是一个同时在类和方法上应用了 @RequestMapping 注解的示例,上述代码与如下代码等价

@RestController
// 映射到类上
// localhost:8080/user
@RequestMapping("/user")
public class UserController {
        // 映射到方法上
        // localhost:8080/user/login
        // 此处通常用 @GetMapping("/user/login") 表明GET请求方式的映射
    @RequestMapping("/login") 
    public String login() {
        return "user login";
    }
    
    // 映射到方法上
    // localhost:8080/user/register
    // 此处通常用 @PostMapping("/user/login") 表明POST请求方式的映射
    @RequestMapping("/register")
    public String register() {
        return "user register";
    }
}

一般情况下,这样代码更规范,因为user的控制器UserController只对user表进行操作。

4.处理 HTTP 请求

Spring MVC 的 @RequestMapping 注解能够处理 HTTP 请求的方法, 比如 GET, PUT, POST, DELETE 以及 PATCH。

所有的请求默认都会是 HTTP GET 类型的。

为了能降一个请求映射到一个特定的 HTTP 方法,你需要在 @RequestMapping 中使用 method 属性来声明 HTTP 请求所使用的方法类型,也可以使用等价的组合注解。

请求组合注解共享注解
GET @GetMapping @RequestMapping(method = RequestMethod.GET)
POST @PostMapping @RequestMapping(method = RequestMethod.POST)
PUT @PutMapping @RequestMapping(method = RequestMethod.PUT)
DELETE @DeleteMapping @RequestMapping(method = RequestMethod.DELETE)
PATCH @PatchMapping @RequestMapping(method = RequestMethod.PATCH)

需要注意的是,控制器方法都应该映射到一个特定的HTTP方法,即使用组合注解,而不是使用@RequestMapping共享映射。因为组合注解减少了在应用程序上要配置的元数据,并且代码功能更清晰。

@RestController
@RequestMapping("/home")
public class IndexController {
    @RequestMapping(method = RequestMethod.GET)
    String get() {
        return "Hello from get";
    }
    @RequestMapping(method = RequestMethod.DELETE)
    String delete() {
        return "Hello from delete";
    }
    @RequestMapping(method = RequestMethod.POST)
    String post() {
        return "Hello from post";
    }
    @RequestMapping(method = RequestMethod.PUT)
    String put() {
        return "Hello from put";
    }
    @RequestMapping(method = RequestMethod.PATCH)
    String patch() {
        return "Hello from patch";
    }
}

在上述这段代码中, @RequestMapping 注解中的 method 元素声明了 HTTP 请求的 HTTP 方法的类型。

所有的处理处理方法会处理从这同一个 URL( /home)进来的请求, 但要看指定的 HTTP 方法是什么来决定用哪个方法来处理。

例如,一个 POST 类型的请求 /home 会交给 post() 方法来处理,而一个 DELETE 类型的请求 /home 则会由 delete() 方法来处理。

 

标签:String,映射,请求,介绍,user,注解,login,RequestMapping
From: https://www.cnblogs.com/imreW/p/17413126.html

相关文章

  • 全同态(Fully Homomorphic Encryption, FHE)和半同态(Partially Homomorphic Encryption,
    全同态(FullyHomomorphicEncryption,FHE)和半同态(PartiallyHomomorphicEncryption,PHE)全同态加密(FHE)是指一种加密方案,可以在加密状态下进行任意多次的加法和乘法运算,并且可以得到与明文数据相同的结果。这意味着可以在加密的数据上进行复杂的计算,而无需解密数据。FHE是同态......
  • IPB60R950C6-ASEMI代理英飞凌IPB60R950C6功率晶体管介绍
    编辑-ZIPB60R950C6是一款高性能的功率晶体管,它采用了最新的MOSFET技术,具有低导通电阻、高开关速度和低开关损耗等优点,适用于高效率的开关电源和逆变器等应用。本文将从其特点、应用、参数和优势四个方面进行详细阐述。 1、特点IPB60R950C6具有低导通电阻、高开关速度、低输入......
  • 主流原型设计工具介绍
    一、原型设计工具的使用方法与特点对比原型工具使用方法特点墨刀使用者可以通过创建项目、添加页面、设计界面和设置交互来快速设计应用程序和网页原型。它具有实时协作功能,支持多人同时编辑和评论,方便团队协作。墨刀还提供丰富的交互设计选项,可以创建出丰富的交互......
  • 主流原型设计工具介绍
    什么是原型?即把系统主要功能和接口通过快速开发制作为“软件样机”,以可视化的形式展现给用户,及时征求用户意见,从而明确无误地确定用户需求。同时,原型也可用于征求内部意见,作为分析和设计的接口之一,可方便于沟通。原型设计工具:原型设计工具可以更好地明确需求,发现设计......
  • domutils 工具库的使用方法介绍
    domutils是一个Node.js的DOM操作工具库,它提供了一系列方法,可以方便地对DOM树进行操作和遍历。该工具库是基于浏览器的DOMAPI开发的,因此具有很好的兼容性和稳定性。下面我们来介绍一下domutils工具库的主要作用和使用方法。作用domutils工具库的主要作用是提供一些......
  • Git使用介绍
     Git分支规范  详细介绍了master、develop、feature、release、hotfix、bugfix分支的定义和新建、合并、删除。 Git分支—提交规范 明确提交规则,提交格式要求 GitSCM教程文档https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E5%BC%80%......
  • 基于算法通信过程中的常用协议介绍
    基于算法通信过程中的常用协议介绍1、HTTP(HypertextTransferProtocol):HTTP是一种应用层协议,用于客户端和服务器之间的通信。它基于请求-响应模型,通过发送HTTP请求和接收HTTP响应来进行通信。HTTP协议常用于Web应用中,可以用于传输算法请求和响应数据。2、REST(Representation......
  • 产品相关培训咨询服务介绍(2B/支持在线)
    “用户要的不是电钻,而是墙上的洞”,很多时候,客户要的也不只是培训,而是提升产品能力,进而拿到业务结果。于是,我觉得这事儿可以分五步走——意识对齐、能力补足、实战演练、业务陪跑、组织优化,每个阶段,解决的问题不同,交付的产出不同,上个简单的图,欢迎来聊。......
  • 非空注解@NonNull与@NotNull使用错误导致传参为空时报NPE
    背景新上线了一个需求后,发现时不时的有一些NullPointerException报出来,跟踪后发现都是在一个地方报出来的org.springframework.beans.BeanInstantiationException:Failedtoinstantiate[net.lingyejun.mall.domain.book.req.BookInfoReqDto]:Constructorthrewexception;......
  • Visual Studio Code 小白使用介绍
    前言现在使用Vscode编码的人越来越多,凭借着免费,开源,轻量,跨平台的特点收货了一大批忠实粉丝最近因项目需要开始使用Vscode,但不知为何,感觉有点力不从心,不知道该怎么用首先想到去官网看看,然后放弃了(英语渣渣表示压力山大,其实正因为英语差,才更应该锻炼一下的,大家不要学我23333)最后自己......