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

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

面试官: 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 logic
        return 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 object
        return user;
    }

三、总结

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

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

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

四、应用建议

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

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

相关推荐
RainbowSea11 分钟前
跨域问题(Allow CORS)解决(3 种方法)
java·spring boot·后端
掘金-我是哪吒13 分钟前
分布式微服务系统架构第155集:JavaPlus技术文档平台日更-Java线程池实现原理
java·分布式·微服务·云原生·架构
RainbowSea16 分钟前
问题 1:MyBatis-plus-3.5.9 的分页功能修复
java·spring boot·mybatis
前端 贾公子19 分钟前
monorepo + Turborepo --- 开发应用程序
java·前端·javascript
不学会Ⅳ1 小时前
Mac M芯片搭建jdk源码环境(jdk24)
java·开发语言·macos
虫小宝1 小时前
高佣金返利平台监控体系建设:APM、链路追踪与佣金异常预警系统技术实现
java
sniper_fandc2 小时前
SpringBoot系列—入门
java·spring boot·后端
代码的余温3 小时前
Maven引入第三方JAR包实战指南
java·maven·jar
pianmian16 小时前
类(JavaBean类)和对象
java
我叫小白菜7 小时前
【Java_EE】单例模式、阻塞队列、线程池、定时器
java·开发语言