@RequestParam 和 @PathVariable偏好列出推荐图书案例

@RequestParam@PathVariable 是 Spring MVC 中两个非常重要的注解,它们都用于将 Web 请求中的信息绑定到控制器方法的参数上,但它们各自适用于不同的场景。

注解设计结构

业务案例:在线图书商店

例如在开发一个在线图书商店的 Web API,该 API 允许用户搜索图书、查看图书详情、以及根据用户偏好列出推荐图书。

1. 搜索图书

用户可以通过关键字和其他可选参数(如作者、出版年份)来搜索图书。

API Endpoint:

txt 复制代码
GET /api/books?keyword=spring&author=authorName&page=1&size=10

Controller 方法:

java 复制代码
@GetMapping("/api/books")
public ResponseEntity<List<Book>> searchBooks(
        @RequestParam(required = true) String keyword,
        @RequestParam(required = false) String author,
        @RequestParam(defaultValue = "1") int page,
        @RequestParam(defaultValue = "10") int size) {
    List<Book> books = bookService.searchBooks(keyword, author, page, size);
    return ResponseEntity.ok(books);
}

在这个例子中,@RequestParam 注解用于提取请求中的关键字、作者、页码和大小参数。required = true 表示关键字参数是必需的,而其他参数则有默认值。

2. 查看图书详情

用户可以通过图书的 ID 获取图书的详细信息。

API Endpoint:

txt 复制代码
GET /api/books/123

Controller 方法:

java 复制代码
@GetMapping("/api/books/{bookId}")
public ResponseEntity<Book> getBookDetails(@PathVariable Long bookId) {
    Book book = bookService.findBookById(bookId);
    if (book == null) {
        return ResponseEntity.notFound().build();
    }
    return ResponseEntity.ok(book);
}

在这个例子中,@PathVariable 注解用于从 URL 中提取 bookId。如果找不到指定 ID 的图书,则返回 404 状态码。

3. 获取推荐图书

根据用户的购买历史和评分,系统可以推荐图书。

API Endpoint:

txt 复制代码
GET /api/users/{userId}/recommendations

Controller 方法:

java 复制代码
@GetMapping("/api/users/{userId}/recommendations")
public ResponseEntity<List<Book>> getRecommendations(@PathVariable Long userId) {
    List<Book> recommendations = bookService.getRecommendationsForUser(userId);
    return ResponseEntity.ok(recommendations);
}

在这个例子中,@PathVariable 注解用于从 URL 中提取 userId,然后根据用户 ID 获取推荐图书列表。

属性说明

@RequestParam 属性:

  1. value:

    • 类型:String
    • 作用:指定查询参数的名称。这是 @RequestParam 的主要属性,用于匹配请求中的查询字符串参数。
  2. name:

    • 类型:String
    • 作用:为绑定的参数提供自定义名称。如果指定了 name,将使用该名称而不是 value 属性的值。
  3. required:

    • 类型:boolean
    • 默认值:true
    • 作用:指示参数是否必须在请求中提供。如果设置为 true 且请求中没有提供参数,则会抛出 ServletRequestBindingException
  4. defaultValue:

    • 类型:String
    • 作用:提供参数的默认值。如果请求中没有提供参数,或者参数值为空字符串,将使用此默认值。如果请求中提供了参数,但参数值为空字符串,且 required 属性设置为 false,则注入 null

@PathVariable 属性:

  1. value:

    • 类型:String
    • 作用:指定路径变量的名称。这是 @PathVariable 的主要属性,用于匹配 URL 模板中的路径变量。
  2. name:

    • 类型:String
    • 作用:为绑定的参数提供自定义名称。如果指定了 name,将使用该名称而不是 value 属性的值。
  3. required:

    • 类型:boolean
    • 默认值:true
    • 作用:指示路径变量是否必须在 URL 中提供。如果设置为 true 且 URL 中没有提供变量,则会抛出 ServletRequestBindingException
  4. defaultValue:

    • 类型:String
    • 作用:提供路径变量的默认值。如果 URL 中没有提供变量,或者变量值为空字符串,将使用此默认值。通常路径变量是必需的,因此默认值不常用。

总结:

  • @RequestParam 注解用于从请求的查询参数中提取值。它非常适合于搜索、过滤和分页等场景,其中客户端可以传递多个参数来定制响应。
  • @PathVariable 注解用于从请求的 URL 路径中提取变量。它非常适合于访问资源的特定实例,例如获取特定 ID 的图书详情或用户特定的数据。
相关推荐
火烧屁屁啦6 分钟前
【JavaEE进阶】初始Spring Web MVC
java·spring·java-ee
w_312345420 分钟前
自定义一个maven骨架 | 最佳实践
java·maven·intellij-idea
岁岁岁平安22 分钟前
spring学习(spring-DI(字符串或对象引用注入、集合注入)(XML配置))
java·学习·spring·依赖注入·集合注入·基本数据类型注入·引用数据类型注入
武昌库里写JAVA25 分钟前
Java成长之路(一)--SpringBoot基础学习--SpringBoot代码测试
java·开发语言·spring boot·学习·课程设计
Q_192849990632 分钟前
基于Spring Boot的九州美食城商户一体化系统
java·spring boot·后端
张国荣家的弟弟1 小时前
【Yonghong 企业日常问题 06】上传的文件不在白名单,修改allow.jar.digest属性添加允许上传的文件SH256值?
java·jar·bi
ZSYP-S1 小时前
Day 15:Spring 框架基础
java·开发语言·数据结构·后端·spring
yuanbenshidiaos1 小时前
C++----------函数的调用机制
java·c++·算法
是小崔啊1 小时前
开源轮子 - EasyExcel01(核心api)
java·开发语言·开源·excel·阿里巴巴
黄公子学安全2 小时前
Java的基础概念(一)
java·开发语言·python