解密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 对象上,然后我们可以在后端进行相应的业务逻辑处理。


相关文章
|
3天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
15 2
|
6天前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
|
15天前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
8天前
|
SQL Java 数据库连接
从理论到实践:Hibernate与JPA在Java项目中的实际应用
本文介绍了Java持久层框架Hibernate和JPA的基本概念及其在具体项目中的应用。通过一个在线书店系统的实例,展示了如何使用@Entity注解定义实体类、通过Spring Data JPA定义仓库接口、在服务层调用方法进行数据库操作,以及使用JPQL编写自定义查询和管理事务。这些技术不仅简化了数据库操作,还显著提升了开发效率。
20 3
|
18天前
|
SQL 监控 Java
技术前沿:Java连接池技术的最新发展与应用
本文探讨了Java连接池技术的最新发展与应用,包括高性能与低延迟、智能化管理和监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,为开发者提供了一份详尽的技术指南。
28 7
|
16天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
30 3
|
16天前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
33 2
|
17天前
|
缓存 Java 数据库连接
Hibernate:Java持久层框架的高效应用
通过上述步骤,可以在Java项目中高效应用Hibernate框架,实现对关系数据库的透明持久化管理。Hibernate提供的强大功能和灵活配置,使得开发者能够专注于业务逻辑的实现,而不必过多关注底层数据库操作。
11 1
|
9天前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
22 0
|
13天前
|
Java 编译器
Java进阶之标准注解
Java进阶之标准注解
26 0