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


相关文章
|
2月前
|
人工智能 算法 Java
Java与AI驱动区块链:构建智能合约与去中心化AI应用
区块链技术和人工智能的融合正在开创去中心化智能应用的新纪元。本文深入探讨如何使用Java构建AI驱动的区块链应用,涵盖智能合约开发、去中心化AI模型训练与推理、数据隐私保护以及通证经济激励等核心主题。我们将完整展示从区块链基础集成、智能合约编写、AI模型上链到去中心化应用(DApp)开发的全流程,为构建下一代可信、透明的智能去中心化系统提供完整技术方案。
250 3
|
2月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
4月前
|
存储 监控 数据可视化
Java 大视界 -- 基于 Java 的大数据可视化在企业生产运营监控与决策支持中的应用(228)
本文探讨了基于 Java 的大数据可视化技术在企业生产运营监控与决策支持中的关键应用。面对数据爆炸、信息孤岛和实时性不足等挑战,Java 通过高效数据采集、清洗与可视化引擎,助力企业构建实时监控与智能决策系统,显著提升运营效率与竞争力。
|
3月前
|
人工智能 Java API
构建基于Java的AI智能体:使用LangChain4j与Spring AI实现RAG应用
当大模型需要处理私有、实时的数据时,检索增强生成(RAG)技术成为了核心解决方案。本文深入探讨如何在Java生态中构建具备RAG能力的AI智能体。我们将介绍新兴的Spring AI项目与成熟的LangChain4j框架,详细演示如何从零开始构建一个能够查询私有知识库的智能问答系统。内容涵盖文档加载与分块、向量数据库集成、语义检索以及与大模型的最终合成,并提供完整的代码实现,为Java开发者开启构建复杂AI智能体的大门。
1511 58
|
2月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
127 8
|
3月前
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
497 12
|
3月前
|
监控 Java 数据库
从零学 Dropwizard:手把手搭轻量 Java 微服务,告别 Spring 臃肿
Dropwizard 整合 Jetty、Jersey 等成熟组件,开箱即用,无需复杂配置。轻量高效,启动快,资源占用少,内置监控、健康检查与安全防护,搭配 Docker 部署便捷,是构建生产级 Java 微服务的极简利器。
302 3
|
3月前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
412 1
|
4月前
|
前端开发 Java 开发者
Java新手指南:在Spring MVC中使用查询字符串与参数
通过结合实际的需求和业务逻辑,开发者可以灵活地利用这些机制,为用户提供更丰富而高效的Web应用体验。
163 15
|
4月前
|
设计模式 XML 安全
Java枚举(Enum)与设计模式应用
Java枚举不仅是类型安全的常量,还具备面向对象能力,可添加属性与方法,实现接口。通过枚举能优雅实现单例、策略、状态等设计模式,具备线程安全、序列化安全等特性,是编写高效、安全代码的利器。