高级java每日一道面试题-2025年01月24日-框架篇[SpringMVC篇]-SpringMVC常用的注解有哪些?

news/2025/1/26 8:46:41/

如果有遗漏,评论区告诉我进行补充

SpringMVC_1">面试官: SpringMVC常用的注解有哪些?

我回答:

一、核心注解详解

1. @Controller
  • 作用:将一个普通的Java类标记为处理请求的控制器。

  • 应用场景:在Spring MVC中起到了路由请求和处理业务逻辑的作用,并注册为Spring容器的Bean。

  • 使用方式:通过组件扫描或显式配置等方式,让Spring能够自动检测到这个控制器并进行实例化和管理。

    java">@Controller
    public class MyController {// Handler methods here
    }
    
2. @RequestMapping
  • 作用:用于将HTTP请求映射到控制器类或处理请求的方法上。

  • 属性

    • value:映射的URL路径。
    • method:指定请求的HTTP方法类型(如GET、POST等)。
    • consumes:指定请求提交的内容类型。
    • produces:指定返回的内容类型。
  • 使用方式:可以修饰类,也可以修饰方法。当同时修饰类和方法时,访问地址是类路径+方法路径。

    java">@RequestMapping(value = "/users", method = RequestMethod.GET)
    public String getUsers() {return "userList";
    }
    
3. @GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping
  • 作用:这些注解是@RequestMapping的简化形式,分别用于处理HTTP的GET、POST、PUT、DELETE、PATCH请求。

  • 使用场景

    • @GetMapping:用于获取资源。
    • @PostMapping:用于提交资源。
    • @PutMapping:通常用于更新资源,但有时也用于添加资源。
    • @DeleteMapping:用于删除资源。
    • @PatchMapping:用于对资源进行部分更新。
    java">@GetMapping("/users/{id}")
    public User getUserById(@PathVariable Long id) {return userService.getUser(id);
    }@PostMapping("/users")
    public User createUser(@RequestBody User user) {return userService.saveUser(user);
    }
    
4. @RequestParam
  • 作用:用于将请求参数绑定到处理请求的方法的参数上。

  • 属性

    • value:请求参数的名称。
    • required:指定参数是否必需,默认为true
    • defaultValue:指定参数的默认值。
  • 使用场景:当请求中包含与@RequestParam声明的名称一致的参数时,Spring MVC会自动将参数值绑定到方法参数上。

    java">@GetMapping("/search")
    public List<Item> searchItems(@RequestParam("query") String query) {return itemService.search(query);
    }
    
5. @PathVariable
  • 作用:用于将请求路径中的变量绑定到处理请求的方法的参数上。

  • 使用场景:在URL路径中使用花括号{}包围变量名,Spring MVC会自动从路径中提取对应名称的变量值,并将其绑定到方法参数上。

    java">@GetMapping("/items/{id}")
    public Item getItemById(@PathVariable("id") Long id) {return itemService.getItem(id);
    }
    
6. @RequestBody
  • 作用:用于接收JSON或其他类型的请求体数据,并将其转换为Java对象。

  • 使用场景:当客户端发送POST或PUT请求,且请求体中包含JSON数据时,可以使用@RequestBody将请求体数据转换为Java对象进行处理。

    java">@PostMapping("/items")
    public Item addItem(@RequestBody Item item) {return itemService.addItem(item);
    }
    
7. @ResponseBody
  • 作用:用于将方法的返回值作为HTTP响应体返回给客户端。

  • 使用场景:当控制器方法的返回值需要直接作为响应体返回时,可以使用@ResponseBody注解。它通常与@RestController注解配合使用,后者是@Controller@ResponseBody的组合注解。

    java">@GetMapping("/api/data")
    @ResponseBody
    public String getData() {return "Some Data";
    }
    

二、其他重要注解

8. @SessionAttribute, @CookieValue, @RequestHeader, @RequestPart
  • @SessionAttribute:用于获取Session中的属性值。

  • @CookieValue:用于从Cookie中获取值。

  • @RequestHeader:用于获取HTTP请求头中的值。

  • @RequestPart:用于处理文件上传等multipart/form-data类型的请求。

    java">@PostMapping("/upload")
    public ResponseEntity<String> handleFileUpload(@RequestPart("file") MultipartFile file) {// Handle file upload logicreturn new ResponseEntity<>("File uploaded successfully", HttpStatus.OK);
    }
    
9. @ControllerAdvice, @ModelAttribute
  • @ControllerAdvice:用于定义全局的异常处理、数据绑定等逻辑。它可以配合@ExceptionHandler@InitBinder等注解使用。

  • @ModelAttribute:用于在方法执行前将某个对象添加到Model中,以便在视图层中使用。它也可以用于方法参数上,表示该参数的值应该从Model中获取。

    java">@ControllerAdvice
    public class GlobalExceptionHandler {@ExceptionHandler(MyCustomException.class)public ResponseEntity<String> handleMyCustomException(MyCustomException ex) {return new ResponseEntity<>("Error: " + ex.getMessage(), HttpStatus.BAD_REQUEST);}
    }@ModelAttribute("user")
    public User addDefaultUser(Model model) {User user = new User();// Set default values for the user objectreturn user;
    }
    

三、总结

掌握Spring MVC常用注解不仅有助于简化Web应用程序的开发,还能展示你对Spring框架的理解和技术深度。理解每个注解的作用及其使用场景,在实际项目中合理运用这些注解,可以显著提高代码的可读性和维护性。

在面试中,除了熟悉这些注解的基本用法外,还应该能够解释它们的工作原理以及如何结合使用来解决复杂的业务需求。例如,知道如何通过组合使用@RequestMapping@PathVariable@RequestBody来构建RESTful API接口,或者如何利用@ExceptionHandler@ControllerAdvice来进行全局异常处理。

此外,了解Spring Boot中与Spring MVC相关的自动配置特性也很重要,因为这展示了你对现代Java Web开发工具链的全面理解。通过合理运用上述注解,可以有效地管理和优化Spring MVC项目,从而提高系统的整体性能和可靠性。

四、应用建议

  • 选择合适的注解:根据具体的业务需求选择最符合的注解,避免引入不必要的复杂度。
  • 了解注解背后的原理:不仅要会用,还要理解注解是如何工作的,这有助于在遇到问题时进行调试和优化。
  • 利用自定义注解:对于有特殊需求的情况,考虑创建自己的注解来简化代码逻辑。
  • 定期审查依赖:随着Spring版本的迭代,定期检查并更新注解及其相关依赖,确保项目使用的都是最新的稳定版本。

通过以上方法,可以有效地管理和优化Spring MVC项目中的注解使用,从而提高系统的整体性能和可靠性。


http://www.ppmy.cn/news/1565979.html

相关文章

GitHub的主要用途及核心功能

------> 在给手机成功root之后&#xff0c;我也经常光临GitHub&#xff0c;在上面挖掘好玩的模块还有&#xff0c;并根据其源代码进行学习。那GitHub是什么网站呢&#xff1f;它又有什么功能&#xff1f; GitHub 是什么&#xff1f; GitHub 是一个基于 Git 的版本控制和代…

docker 安装 mysql 详解

在平常的开发工作中&#xff0c;我们经常需要用到 mysql 数据库。那么在docker容器中&#xff0c;应该怎么安装mysql数据库呢。简单来说&#xff0c;第一步&#xff1a;拉取镜像&#xff1b;第二步&#xff1a;创建挂载目录并设置 my.conf&#xff1b;第三步&#xff1a;启动容…

ubuntu如何测试网络性能

在 Ubuntu 中&#xff0c;有多种工具可以测试网络性能&#xff0c;包括带宽、延迟、丢包率等。以下是常用的工具和方法&#xff1a; 1. 使用 ping 测试网络延迟和连通性 ping 是最基本的网络测试工具&#xff0c;用于测试目标主机的连通性和延迟。 命令&#xff1a; ping &l…

嵌入式知识点总结 ARM体系与架构 专题提升(四)-编程

针对于嵌入式软件杂乱的知识点总结起来&#xff0c;提供给读者学习复习对下述内容的强化。 目录 1.嵌人式编程中&#xff0c;什么是大端?什么是小端 ? 2.如何判断计算机处理器是大端&#xff0c;还是小端 ? 3.如何进行大小端的转换 ? 4.如何对绝对地址0x100000赋值? 1…

STM32 GPIO配置 点亮LED灯

本次是基于STM32F407ZET6做一个GPIO配置&#xff0c;实现点灯实验。 新建文件 LED.c、LED.h文件&#xff0c;将其封装到Driver文件中。 双击Driver文件将LED.c添加进来 编写头文件&#xff0c;这里注意需要将Driver头文件声明一下。 在LED.c、main.c里面引入头文件LED.h LED初…

2025美赛B题完整代码+建模过程

问题一 为朱诺市建立一个可持续旅游产业模型。具体要求包括考虑游客数量、总收入,以及为稳定旅游业而实施的措施,明确优化因素和约束条件,并制定额外收入的支出计划,展示这些支出如何反馈到模型中以促进可持续旅游业发展,同时进行敏感性分析,讨论哪些因素最为重要。 为了…

使用scikit-learn中的KNN包实现对鸢尾花数据集的预测

1. 导入必要的库 首先&#xff0c;需要导入所需的库&#xff1a; import numpy as np import pandas as pd from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.…

HTTP 配置与应用(不同网段)

想做一个自己学习的有关的csdn账号&#xff0c;努力奋斗......会更新我计算机网络实验课程的所有内容&#xff0c;还有其他的学习知识^_^&#xff0c;为自己巩固一下所学知识&#xff0c;下次更新校园网设计。 我是一个萌新小白&#xff0c;有误地方请大家指正&#xff0c;谢谢…