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

这里写目录标题

  • 什么是 Spring MVC?
  • 常用注解
    • @RequestMapping
    • @RequestParam
    • @RequestBody
    • @PathVariable
    • @RequestPart

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/59696.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数学建模-爬虫系统学习

尚硅谷Python爬虫教程小白零基础速通(含python基础爬虫案例) 内容包括:Python基础、Urllib、解析(xpath、jsonpath、beautiful)、requests、selenium、Scrapy框架 python基础 进阶(字符串 列表 元组 字典…

如何使用ONLYOFFICE+ffmpeg来给视频文件打马赛克

如何使用ONLYOFFICEffmpeg来给视频文件打马赛克 我这里之前写过很多关于ONLYOFFICE使用、安装的系列图文,也写过很多关于ffmpeg使用的图文,那么这次继续,把这两个开源软件放在一起,能碰撞出什么火花般的功能来。 这就是给视频文…

【C#学习笔记】内存管理

文章目录 分配内存释放内存GC标记清除算法分代算法 .NET的GC机制有这样两个问题: 官方文档 自动内存管理 自动内存管理是CLR在托管执行过程中提供的服务之一。 公共语言运行时的垃圾回收器为应用程序管理内存的分配和释放。 对开发人员而言,这就意味着…

凯迪正大—SF6泄漏报警装置的主要特点

SF6泄漏报警系统主要特点 ① 系统采用声速原理,可定量、实时在线测量SF6泄漏气体含量,克服了传统测量方法如负电晕放电法和卤素传感器法只能定性判别是否越限的缺陷,能够准确得到气体中SF6含量。 ② 系统采用双差分处理方法,有效…

软件测试需求分析的常用方法

软件测试需求分析时,应要求产品人员对需求进行讲解,并使用相对应的方法进行科学分析,否则无法保障软件测试的完整性和科学性,从而造成在项目中后期Bug频出、风险增大等问题。 而常用的测试需求分析的方法: 1、功能分解…

设计图一般都用什么工具制作?

每个设计师都需要设计图制作软件对设计图软件的选择也有一些需求,可以提高一些效率。网上有很多免费的PC设计软件。本文推荐了2023年5款易用的设计图制作软件 1.即时设计 即时设计是一款免费的在线 UI 设计工具,无系统限制,浏览器打开即可使…

【Leetcode刷题】模拟

本篇文章为 LeetCode 模拟模块的刷题笔记,仅供参考。 目录 一. 字符串Leetcode43.字符串相乘Leetcode592.分数加减运算Leetcode68.文本左右对齐 二. 矩阵Leetcode54.螺旋矩阵Leetcode885.螺旋矩阵 IIILeetcode498.对角线遍历Leetcode874.模拟行走机器人 三. 数组Lee…

淘宝店铺数据API接口 店铺详情数据API 店铺所有商品API接口

引言 在电商平台上,店铺所有商品API接口是一项非常重要且有着广泛应用的技术。它使得开发者能够方便地获取和管理店铺中的所有商品信息,进而实现自动化的商品管理和数据分析。本文将详细介绍店铺所有商品API接口的定义、功能以及调用流程,并附…

idea打开传统eclipse项目

打开传统web项目 1.打开后选择项目文件 2.选择项目结构 3.设置jdk版本 4.导入当前项目模块 5.选择eclipse 6. 设置保存目录 7.右键模块,添加spring和web文件 8. 设置web目录之类的,并且创建打包工具 9.如果有本地lib,添加为库 最后点击应用&…

掌握 JVM 的参数及配置

点击下方关注我,然后右上角点击...“设为星标”,就能第一时间收到更新推送啦~~~ JVM(Java虚拟机)是Java编程语言的核心组件之一,它负责执行Java程序,并提供一系列参数和配置选项,可以调整Java程…

决策树与随机森林

目录 决策树是:Why:How:基本概念决策树生成举例决策树缺点参考 Demo 随机森林1.是:2.Why:3.How:参考 Demo 决策树 是: 1.一种有监督的分类(或预测)算法。 2.利用属性、…

Ubuntu安装MySQL 8.0与Navicat

目录 Ubuntu安装MySQL 8.0 1、更新软件包列表 2、安装 MySQL 8.0 3、启动 MySQL 服务 5、确保MySQL服务器正在运行 5、root 用户的密码 6、登录MySQL,输入mysql密码 7、MySQL默认位置 Ubuntu安装Navicat 1、下载 Navicat 2、额外的软件包 3、执行命令 U…

10分钟理解React生命周期

前言 学习React,生命周期很重要,我们了解完生命周期的各个组件,对写高性能组件会有很大的帮助。 一、简介 React /riˈkt/ 组件的生命周期指的是组件从创建到销毁过程中所经历的一系列方法调用。这些方法可以让我们在不同的时刻执行特定的…

uniapp自定义头部导航栏

有时我们需要一些特殊的头部导航栏页面,取消传统的导航栏,来增加页面的美观度。 下面我就教大家如何配置: 一、效果图 二、实现 首先在uniapp中打开pages.json配置文件,在单个路由配置style里面设置导航栏样式​​​​​​nav…

【计算机网络】NAT技术

文章目录 1. NAT技术简介2. 使用NAT技术转换IP的过程3. NAPT4. NAT技术的缺陷5. NAT和代理服务器 1. NAT技术简介 NAT(Network Address Translation,网络地址转换)技术,是解决IP地址不足的主要手段,并且能够有效避免外…

网络安全 Day26-PHP 简单学习

PHP 简单学习 1. 为什么要学习PHP2. PHP语法3. php 变量4. 字符串数据5. PHP 函数6. 数组 1. 为什么要学习PHP php存量多开源软件多很多安全流程 渗透方法 sql注入基于PHP语言入门简单 2. PHP语法 格式: <?php 内容?>或<?内容?>结尾分号例子<?php phpin…

[Docker实现测试部署CI/CD----自由风格的CI操作[最终架构](5)]

目录 11、自由风格的CI操作&#xff08;最终&#xff09;Jenkins容器化实现方案修改 docker.sock 权限修改 Jenkins 启动命令后重启 Jenkins构建镜像推送到Harbor修改 daemon.json 文件Jenkins 删除构建后操作Jenkins 添加 shell 命令重新构建 Jenkins通知目标服务器拉取镜像目…

【TypeScript】中定义与使用 Class 类的解读理解

目录 类的概念类的继承 &#xff1a;类的存取器&#xff1a;类的静态方法与静态属性&#xff1a;类的修饰符&#xff1a;参数属性&#xff1a;抽象类&#xff1a;类的类型: 总结&#xff1a; 类的概念 类是用于创建对象的模板。他们用代码封装数据以处理该数据。JavaScript 中的…

ChatGPT“侵入”校园,教学评价体制受冲击,需作出调整

北密歇根大学的教授奥曼在学生作业中发现了一篇关于世界宗教的“完美论文”。“这篇文章写得比大多数学生都要好......好到不符合我对学生的预期&#xff01;”他去问ChatGPT&#xff1a;“这是你写的吗&#xff1f;”ChatGPT回答&#xff1a;“99.9%的概率是的。” ChatGPT“侵…

Python入门三

目录&#xff1a; 内置库os内置库sys内置库文件处理内置库科学计算内置库日期与时间处理内置库json内置库正则表达式re内置库多线程threding内置库pythonlogging内置库pythonlogging高级使用venv环境管理pip环境管理常用第三方库yaml常用第三方库pymysql常用第三方库urllib3学…