【Spring MVC】HTTP请求参数、映射注解笔记

一、请求映射

@RequestMapping 是 Spring MVC 中的一个注解,用于映射HTTP请求到控制器方法。它可以映射多个HTTP方法,或者在没有更具体的注解(如 @GetMapping, @PostMapping, 等)时使用。下面是一个示例:

javaimport org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {

    /**
     * 这个方法将处理所有匹配 "/example" 的 HTTP GET 和 POST 请求
     */
    @RequestMapping(value = "/example", method = {RequestMethod.GET, RequestMethod.POST})
    public String handleExampleRequest() {
        // 处理逻辑
        return "This is an example response";
    }

    /**
     * 如果没有更具体的注解,此方法将处理所有匹配 "/other" 的请求
     */
    @RequestMapping("/other")
    public String handleOtherRequest() {
        // 处理逻辑
        return "Handling other requests";
    }
}

在上面的例子中,handleExampleRequest 方法会处理 /example 路径上的 GET 和 POST 请求。
handleOtherRequest 方法将处理所有匹配 /other 的请求,无论请求方法是什么(GET、POST、PUT等),因为没有指定 method 参数,所以默认匹配所有HTTP方法。
请注意,这里使用了 @RestController 注解,它是 @Controller@ResponseBody 的组合,用于创建RESTful服务,自动将返回值转化为HTTP响应体。

REST风格简介

REST(Representational State Transfer)是一种设计分布式系统的原则,尤其适用于Web服务。
外文名:Representational State Transfer,简称REST。
中文名:表现层状态转移。
属性:一种软件架构风格。(以Web为平台的。web服务的架构风格,前后端接口时候用到。)
REST之所以晦涩难懂,是因为前面主语(Resource )被去掉了。
全称是: Resource Representational State Transfer。
通俗来讲就是:资源在网络中以某种表现形式进行状态转移。

分解开来讲解:
Resource:资源,即数据(这是网络的核心);
Representational:某种表现形式,比如用JSONXMLJPEG等;
State Transfer:状态变化。通过HTTP的动词(get查询、post新增、put修改、delete删除)实现。

1.@GetMapping

@GetMapping("/example")
public String handleGetRequest() {
    // 处理逻辑
    return "This is a GET request response";
}
  • 用途:该注解用于处理HTTP GET请求,常用于查询操作,如获取资源信息。由于GET请求的参数通过URL传递,它适用于不需要修改服务器状态的情景。
  • 优势:易于缓存,支持浏览器的书签功能,且请求参数直接可见于URL,便于分享和调试。

2.@PostMapping

@PostMapping("/example")
public ResponseEntity<String> handlePostRequest(@RequestBody MyObject requestObject) {
    // 处理逻辑
    HttpHeaders headers = new HttpHeaders();
    headers.add("Custom-Header", "Value");
    return ResponseEntity.ok("Data received and processed");
}
  • 用途:用于处理HTTP POST请求,主要应用于创建新资源。请求的数据通常包含在请求体中。
  • 优势:POST请求允许较大的数据量传输,且请求参数不在URL中显示,适合提交表单数据或上传文件,保持了较好的安全性。

3. @PutMapping

@PutMapping("/example/{id}")
public String handlePutRequest(@PathVariable Long id, @RequestBody UpdateObject updateObject) {
    // 更新逻辑
    return "Resource with ID " + id + " updated";
}
  • 用途:映射HTTP PUT请求,主要用于更新现有资源的全部属性。要求客户端提供完整的资源表示。
  • 优势:遵循REST原则,表明这是一个整体替换资源的操作,幂等性保证了重复请求不会产生副作用。

4.@DeleteMapping

@DeleteMapping("/example/{id}")
public String handleDeleteRequest(@PathVariable Long id) {
    // 删除逻辑
    return "Resource with ID " + id + " deleted";
}
  • 用途:处理HTTP DELETE请求,用于删除指定资源。
  • 优势:简单明了地表达了资源删除操作,确保安全删除,不会因重复请求导致额外问题。

5.@PatchMapping

@PatchMapping("/example/{id}")
public String handlePatchRequest(@PathVariable Long id, @RequestBody PartialUpdateObject partialUpdate) {
    // 部分更新逻辑
    return "Partial update applied to resource with ID " + id;
}
  • 用途:映射HTTP PATCH请求,用于对资源进行部分更新,即只更新资源的部分属性。
  • 优势:相比PUT请求,PATCH更加高效,因为它只需要发送需要修改的部分数据,而不是整个资源,减少了网络传输量。

这些注解极大地简化了Spring应用中RESTful服务的实现,提高了开发效率和代码的可读性,同时遵循了Web服务的最佳实践。

二、请求参数

1. @RequestParam

  • 用途:此注解用于从HTTP请求的URL查询字符串中获取参数值。当请求的URL中包含额外的查询参数时,比如/search?query=keyword,可以用@RequestParam来绑定这些参数到方法参数上。
  • 场景:适用于过滤、搜索、排序等需要动态参数的场景。
  • 示例
java  @GetMapping("/search")
  public List<Item> searchItems(@RequestParam String query) {
      // 使用query参数执行搜索逻辑
      return itemService.findByKeyword(query);
  }

2. @PathVariable

  • 用途:当URI中包含动态的部分(比如/users/{userId}),@PathVariable用于从URI模板中提取这些变量值。它使得每个资源实例都能通过其ID直接访问。
  • 场景:用于获取资源的详细信息、更新或删除特定资源等操作。
  • 示例
java  @GetMapping("/users/{userId}")
  public User getUserById(@PathVariable Long userId) {
      // 根据userId获取用户信息
      return userService.findById(userId);
  }

3. @RequestBody

  • 用途:此注解用于将HTTP请求的主体内容(通常是JSON或XML格式)绑定到方法的参数上。它适用于POST、PUT、PATCH等需要提交实体数据的请求。
  • 场景:创建或更新资源时,客户端发送整个资源对象到服务器。
  • 示例
java  @PostMapping("/users")
  public User createUser(@RequestBody User newUser) {
      // 创建新用户并保存
      return userService.save(newUser);
  }

4. @ResponseBody

  • 用途:用于将方法的返回值直接写入HTTP响应体中。通常与@RestController配合使用,使得控制器方法无需视图解析,直接返回数据给客户端。
  • 场景:几乎所有的RESTful API响应都会用到,以JSON或XML等形式直接返回数据。
  • 示例(隐含使用,体现在类级别):
java  @RestController
  public class UserController {
      // ...
      @GetMapping("/users/{userId}")
      public User getUserById(@PathVariable Long userId) {
          return userService.findById(userId);
      }
      // ...
  }

5. @HeaderParam

  • 用途:用于从HTTP请求头中获取指定的值。尽管这不是Spring MVC的标准注解(它是JAX-RS的一部分),但在某些情况下,Spring应用也可能通过自定义解析器等方式间接使用它。
  • 场景:验证身份、跟踪请求来源、处理特定的客户端信息等。
  • 示例(注意:Spring中通常使用@RequestHeader代替):
java  @GetMapping("/secure-endpoint")
  public String secureEndpoint(@RequestHeader("Authorization") String authToken) {
      // 验证authToken
      return "Secure content";
  }

6. @CookieValue

  • 用途:用于从HTTP请求的Cookie中获取指定的值。
  • 场景:用户会话管理、个性化设置、保持登录状态等。
  • 示例
java  @GetMapping("/welcome")
  public String welcomePage(@CookieValue("sessionToken") String token) {
      // 使用token进行用户会话验证
      return "Welcome!";
  }

这些注解是构建RESTful Web服务时处理请求和响应数据的关键工具,它们帮助开发者高效地实现客户端与服务器之间的数据交换。

  • 22
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值