解密SpringMVC:探秘常用注解,让你的Java应用飞速起航!

简介: 解密SpringMVC:探秘常用注解,让你的Java应用飞速起航!

什么是 Spring MVC?

Spring MVC是Spring框架中的一个模块,是基于Java的Web应用程序开发框架。它提供了一种用于构建灵活、高效、可扩展的Web应用程序的方式。Spring MVC允许开发者将业务逻辑与视图逻辑分离,以及支持MVC(Model-View-Controller)设计模式,使开发过程更加模块化和易于管理。

在Spring MVC中,控制器(Controller)负责处理用户请求,模型(Model)表示应用程序的数据和业务逻辑,视图(View)用于展示数据给用户。请求首先由DispatcherServlet(前端控制器)接收,然后根据配置的HandlerMapping找到对应的Controller进行处理,并最终返回相应的视图

常用注解

@RequestMapping

@RequestMapping 是 Spring Web 应⽤程序中最常被⽤到的注解之一,是用来实现 URL 路由映射的。

路由映射指的是,当⽤户访问⼀个 url 时,将⽤户的请求对应到程序中某个类的某个⽅法的过程就叫路由映射

@Controller
//标记类为控制器,处理用户请求
@ResponseBody
//将方法返回的对象直接作为响应体返回给客户端
@RequestMapping("/user")
public class UserDemo {
@RequestMapping(value = "/hi")
public  Object getHi(){
    return "zcx,你好!";
}
}

我们使用http://localhost:8080/user/hi这个即可访问,也就是localhost:8080加上类上的@RequestMapping(“/user”)与方法上的@RequestMapping(value = “/hi”)

@RequestMapping 即可修饰类,也可以修饰⽅法。

@Controller
//标记类为控制器,处理用户请求
@ResponseBody
//将方法返回的对象直接作为响应体返回给客户端
public class UserDemo {
    @RequestMapping(value = "/hi")
public  Object getHi(){
    return "zcx,你好!";
}

使用http://localhost:8080/hi访问结果是一样的。

@RequestMapping 注解在Spring MVC中既可以用于处理 GET 请求,也可以用于处理 POST 请求,以及其他HTTP方法的请求

当然指定请求的话也可以如下写法

GET请求的两种写法:

@RequestMapping(value = "/user",method = RequestMethod.GET)
@GetMapping("/user")

POST请求的两种写法:

@RequestMapping(value = "/user",method = RequestMethod.POST)
@PostMapping("/user")

@RequestParam

用来绑定请求参数到方法的参数上,可用来解决前后端参数名不一致问题。

@Controller
//标记类为控制器,处理用户请求
@ResponseBody
//将方法返回的对象直接作为响应体返回给客户端
@RequestMapping("/user")
public class UserDemo {
    @RequestMapping(value = "/hi")
public  Object getHi(@RequestParam("n") String name){
        System.out.println(name+"你好");
    return name+"你好!";
}
}

我们直接使用postman进行请求访问

将key-n与方法中的参数进行了绑定,当然再使用name的话就会报错(这是因为后端已经声明了前端必须传递⼀个 n 的参数)。

@RequestParam 注解还支持其他属性,例如:

required:指定参数是否为必填,默认为 true。

defaultValue:设置参数的默认值。

public  Object getHi(@RequestParam(value = "n",required = false) String name)
public  Object getHi(@RequestParam(value = "n",defaultValue = "zcx") String name)

@RequestBody

@RequestBody 是 Spring MVC 框架中的一个注解,用于接收 HTTP 请求体中的数据,并将其绑定到方法的参数上。通常用于处理 POST 或 PUT 请求中传递的数据,特别是 JSON 或 XML 格式的数据。

假设我们有一个简单的实体类 User 表示用户信息:

public class User {
    private String username;
    private String email;
    // Getters and setters
}

现在,我们想通过 POST 请求来创建一个新的用户,并将用户信息以JSON格式的数据传递到后端。我们可以使用 @RequestBody 注解将请求体中的JSON数据转换为 User 对象

@RestController
public class UserController {
    @PostMapping("/createUser")
    public String createUser(@RequestBody User user) {
        // 处理逻辑,user对象将会从请求体中获取JSON数据
        return "User created successfully!";
    }
}

当客户端发送以下JSON数据的POST请求时:

{
  "username": "john_doe",
  "email": "john@example.com"
}

@RequestBody 注解会将请求体中的JSON数据转换为 User 对象,其中 username 字段的值为 “john_doe”,email 字段的值为 “john@example.com”。然后,createUser 方法中的参数 user 将被自动填充为包含上述JSON数据的 User 对象。

@PathVariable

用于从请求的 URL 路径中获取参数的值。它通常用于处理 RESTful 风格的请求,从 URL 中提取路径变量,并将其绑定到方法的参数上。

@GetMapping("/example/{id}")
    public String handleGetRequest(@PathVariable("id") Long id) {
        // 处理逻辑,id 是从 URL 路径中获取的参数值
        System.out.println("id="+id);
        return "viewName";
    }

使用http://localhost:8080/user/example/99进行访问

可看到获取的id为99

@PathVariable 注解还支持其他属性,例如:

required:指定路径变量是否为必须,默认为 true。

@RequestPart

@RequestPart 注解用于处理复杂的请求数据,特别是多部分(multipart)请求数据,通常用于文件上传场景。它可以用于从请求中获取文件和其他数据。

@RequestMapping("file")
    public String FileUpload(String name,@RequestPart("file") MultipartFile file) throws IOException {
        String fileName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
      // ⽂件保存地址
        String filePath = ClassUtils.getDefaultClassLoader().getResource("stat ic").getPath() +
                "/" + UUID.randomUUID() + fileName;
      // 保存⽂件
        file.transferTo(new File(filePath));
        return "上传成功!"+filePath;
    }

@RequestPart 注解将会将请求中的数据正确地映射到 name对象和 file 对象上,然后我们可以在后端进行相应的业务逻辑处理。


相关文章
|
15天前
|
XML Java 编译器
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
50 7
|
27天前
|
人工智能 安全 Java
Java和Python在企业中的应用情况
Java和Python在企业中的应用情况
48 7
|
20天前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
38 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
17天前
|
XML 前端开发 安全
Spring MVC:深入理解与应用实践
Spring MVC是Spring框架提供的一个用于构建Web应用程序的Model-View-Controller(MVC)实现。它通过分离业务逻辑、数据、显示来组织代码,使得Web应用程序的开发变得更加简洁和高效。本文将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring MVC,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
45 2
|
21天前
|
Java 编译器 数据库
Java 中的注解(Annotations):代码中的 “元数据” 魔法
Java注解是代码中的“元数据”标签,不直接参与业务逻辑,但在编译或运行时提供重要信息。本文介绍了注解的基础语法、内置注解的应用场景,以及如何自定义注解和结合AOP技术实现方法执行日志记录,展示了注解在提升代码质量、简化开发流程和增强程序功能方面的强大作用。
57 5
|
22天前
|
缓存 Java 开发者
Java多线程并发编程:同步机制与实践应用
本文深入探讨Java多线程中的同步机制,分析了多线程并发带来的数据不一致等问题,详细介绍了`synchronized`关键字、`ReentrantLock`显式锁及`ReentrantReadWriteLock`读写锁的应用,结合代码示例展示了如何有效解决竞态条件,提升程序性能与稳定性。
78 6
|
20天前
|
监控 Java 数据库连接
Java线程管理:守护线程与用户线程的区分与应用
在Java多线程编程中,线程可以分为守护线程(Daemon Thread)和用户线程(User Thread)。这两种线程在行为和用途上有着明显的区别,了解它们的差异对于编写高效、稳定的并发程序至关重要。
28 2
|
1月前
|
安全 Java 开发者
Java 多线程并发控制:深入理解与实战应用
《Java多线程并发控制:深入理解与实战应用》一书详细解析了Java多线程编程的核心概念、并发控制技术及其实战技巧,适合Java开发者深入学习和实践参考。
52 6
|
26天前
|
关系型数据库 MySQL Java
MySQL索引优化与Java应用实践
【11月更文挑战第25天】在大数据量和高并发的业务场景下,MySQL数据库的索引优化是提升查询性能的关键。本文将深入探讨MySQL索引的多种类型、优化策略及其在Java应用中的实践,通过历史背景、业务场景、底层原理的介绍,并结合Java示例代码,帮助Java架构师更好地理解并应用这些技术。
26 2
|
29天前
|
存储 安全 Java
Java多线程编程中的并发容器:深入解析与实战应用####
在本文中,我们将探讨Java多线程编程中的一个核心话题——并发容器。不同于传统单一线程环境下的数据结构,并发容器专为多线程场景设计,确保数据访问的线程安全性和高效性。我们将从基础概念出发,逐步深入到`java.util.concurrent`包下的核心并发容器实现,如`ConcurrentHashMap`、`CopyOnWriteArrayList`以及`BlockingQueue`等,通过实例代码演示其使用方法,并分析它们背后的设计原理与适用场景。无论你是Java并发编程的初学者还是希望深化理解的开发者,本文都将为你提供有价值的见解与实践指导。 --- ####
下一篇
DataWorks