在百度做网站多少钱/企业网站优化软件

在百度做网站多少钱,企业网站优化软件,网站建设 康盛设计,洛阳php网站开发Spring MVC 常用注解介绍 文章目录 Spring MVC 常用注解介绍准备1. RequestMapping1.1 介绍2.2 注解使用 2. 请求参数2.1 传递单个参数2.2 传递多个参数2.3 传递对象2.4 传递数组 3. RequestParam3.1 注解使用3.2 传入集合 4. RequestBody5. PathVariable6. RequestPart7. Rest…

Spring MVC 常用注解介绍

文章目录

  • Spring MVC 常用注解介绍
    • 准备
    • 1. @RequestMapping
      • 1.1 介绍
      • 2.2 注解使用
    • 2. 请求参数
      • 2.1 传递单个参数
      • 2.2 传递多个参数
      • 2.3 传递对象
      • 2.4 传递数组
    • 3. @RequestParam
      • 3.1 注解使用
      • 3.2 传入集合
    • 4. @RequestBody
    • 5. @PathVariable
    • 6. @RequestPart
    • 7. @RestController
      • 7.1 介绍
      • 7.2 @ResposeBody

本文主要介绍在使用 Spring MVC 构建网络请求时常用到的注解以及其使用方式

准备

在正式讲解注解前,我们先准备一个测试案例:

  1. 构建一个Spring Boot项目(Spring MVC项目和Spring Boot项目的构建方式一致,这里使用的是IDEA专业版,自带Spring Initializr,其它版本需要自行安装插件)

在这里插入图片描述

  1. 引入Spring Web模块

    在这里插入图片描述

  2. 删除一些没必要文件

    在这里插入图片描述

  3. 按顺序创建Controller类代码并启动主程序BlogSpringMvcApplication

    在这里插入图片描述

    输入链接测试一下:http:127.0.0.1:8080/test1

    在这里插入图片描述

返回成功!

1. @RequestMapping

1.1 介绍

RequestMapping是Spring Web MVC应用程序中最常用的注解之一,用来注册接口的路由映射,表示服务器收到路径为/test1的请求后,就会调用Test1这个方法

路由映射:当用户访问某个URL时,将用户的请求对应到服务器中某个类的某个方法的过程就叫做路由映射

如代码所示:

@RestController 
public class TestController {@RequestMapping("/test1")public String Test1() {return "Hello MVC";}
}

注:上述代码中@RestController的作用:

一个项目中会有很多的类,Spring会扫描所有的类,并只有当这个类有被@RestController注解修饰时Spring才会进去这个类并查看有没有被@RequestMapping修饰的方法

2.2 注解使用

@RequestMapping可以修饰方法,也可以修饰类

  • 当@RequestMapping修饰方法时,访问该方法的路径就是当前修饰方法的@RequestMapping中的路径
  • 当@RequestMapping修饰类时,访问该方法的路径就是修饰类的@RequestMapping中的路径+ 当前修饰方法的@RequestMapping中的路径

如代码所示:

@RequestMapping("/total")
@RestController
public class TestController {@RequestMapping("/test1")public String Test1() {return "Hello MVC";}
}

启动Spring, 此时重新访问路径http:127.0.0.1:8080/test1就已经访问不到了

在这里插入图片描述

现在的访问路径为:类路径 + 方法路径http:127.0.0.1:8080/total/test1

在这里插入图片描述

注:

  • 路径前的“/”可以不加(“/total”),Spring启动后会进行判断,若没有加“/"Spring会自动帮你添加,但建议主动加上

  • @RequestMapping既支持GET请求,也支持POST请求,同时也支持其它请求,若需要指定请求,可将注解改为:

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

    指定请求方式后,当前接口只能接收相应请求方式的请求,否则会报错(这里使用postman进行测试, 接口请求方式指定为POST请求, 并用GET请求进行访问):

    在这里插入图片描述

2. 请求参数

这里补充一下Spring MVC对接收参数的格式要求

2.1 传递单个参数

当我们只接收单个参数时,不需要加其它注解,Spring MVC直接用方法中的形参就可以了:

@RequestMapping("/name" )
public String Test2(String name) { // 传入参数形参名称需与接口参数形参名称一致return "hi " + name;
}

在这里插入图片描述

  1. 传入的形参名称要与接口形参的名称一致,否则返回参数默认为null

  2. 用基本类型(int)充当参数时, 参数必须传(boolean类型除外),否则会出现异常(500)

    @RequestMapping("/num")public int Test3(int n) {return n;}   
    
  3. 若传入参数类型与接口参数类型不匹配,则会出现异常(500)

    在这里插入图片描述

2.2 传递多个参数

当传入多个参数时,传入的参数名称要与接口中有的参数名称一致,传入顺序可以不一致

@RequestMapping("/test4")public String Test4(String name, int age) {return "name: " + name + " age: " + age;}

在这里插入图片描述

注:传入参数数量与接口参数中数量一致,否则会抛异常(500):

在这里插入图片描述

2.3 传递对象

有时候需要的传递参数比较多,为了方便我们可以把它封装成一个对象来进行传递,比如下面的Personal对象:

import lombok.Data;@Data
public class Person {private int id;private String name;private String password;}

在这里我们使用到了一个注解:@Data

它的作用就是帮我们封装好了属性的get方法和set方法,方便我们直接调用,不过这需要我们在pom.xml文件中引入依赖lombok:

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope>
</dependency>

代码示例

@RequestMapping("/test5")
public String Test5(Person person) {return "name: " + person.getName()+ " id: " + person.getId()+ " password: " + person.getPassword();
}

在这里插入图片描述

:Spring会根据参数的名称自动绑定到对象的各个属性上,若对应属性传入的参数为空,则该属性内容为null(基本类型为默认初始值)

2.4 传递数组

Spring MVC可以自动绑定数组参数并赋值:

@RequestMapping("/test7")
public String Test7(String[] arr) {return Arrays.toString(arr);
}

在这里插入图片描述

3. @RequestParam

3.1 注解使用

在某些特殊情况下,前端传给我们的参数可能与我们接口上的参数名称不一样,这个时候我们通过使用@RequestParam注解来进行后端参数重命名,如下:

@RequestMapping("/test6")
public String Test6(@RequestParam("time") String createTime) {return createTime;
}

若此时给它传入参数createTime则会报错(400):

在这里插入图片描述

因为此时后端接口的参数已经被我们通过注解@RequestParam修改为了time,所以此时需要传入参数time才不会出现问题:

在这里插入图片描述

一旦加上该注解,则默认该参数是必传的,如果此时你想让这个参数修改为非必传,可以这样修改注解:

public String Test6(@RequestParam(value = "time", required = false) String createTime) {return createTime;
}

在这里插入图片描述

3.2 传入集合

默认情况下,请求中参数名相同的多个值,会被封装到数组

如果要封装到集合中,需要使用@RequestParam注解绑定参数关系:

@RequestMapping("/test8")
public String Test8(@RequestParam List<String> listParam) {return "size: " + listParam.size() + ", listParam: " + listParam;
}

在这里插入图片描述

若此时去掉注解@RequestParam,则会抛出异常(500):

在这里插入图片描述

在这里插入图片描述

4. @RequestBody

当我们想传入JSON格式的对象时,我们需要通过@RequestBody来修饰参数:

RequestBody:请求正文,意思是这个注解作用在请求正文的数据绑定,请求参数必须写在请求正文中

代码示例

@RequestMapping("/test9")
public String Test9(@RequestBody Person person) {return person.toString();
}

在这里插入图片描述

若此时去掉注解@RequestBody,则后端无法给Person对象赋值,自动填充默认参数:

在这里插入图片描述

5. @PathVariable

@PathVariable这个注解主要作用在URL路径上的数据绑定,默认将参数写到URL上,Spring MVC就能获取到:

@RequestMapping("/test10/{name}/{id}")
public String Test10(@PathVariable String name, @PathVariable("id") Integer userId) {return "name: " + name + " userId: " + userId;
}

在这里插入图片描述

注:如果传入的参数与接口参数名称不一致,则需要给@PathVariable的属性value赋值,将URL路径中对应的参数传给它

6. @RequestPart

当我们需要上传文件时,可以使用@RequestPart注解:

@RequestMapping("/test11")
public String Test11(@RequestPart MultipartFile file) throws IOException {// 获取文件名称String fileName = file.getName();// 将文件上传到指定路径file.transferTo(new File("D:/temp/" + file.getOriginalFilename()));return "接收到的文件名称为:" + fileName;
}

此时文件也成功传输到了指定路径:

在这里插入图片描述

7. @RestController

7.1 介绍

在最开始的代码中我们使用到了@RestController这个注解,其实这个注解是有由另外两个注解组合而成的,即

@RestController = @ResponseBody + @Controller

  • @Controller: 定义一个控制器,Spring框架启动时加载,把这个对象交给Spring管理
  • @ResponseBody:定义返回的数据格式为非视图,返回一个text/html信息

它的源码如下:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {@AliasFor(annotation = Controller.class)String value() default "";
}

如果只想要返回视图的话,只需要把@ResposeBody去掉剩下@Controller即可

7.2 @ResposeBody

@ResponseBody表示返回数据, 如果我们在接口上添加@ResponseBody的话,则即使返回的是html页面spring也会将它转化为单纯的文本数据返回:

@Controller
public class IndexController {@ResponseBody@RequestMapping("/index")public Object index() {return "/index.html";}
}

在这里插入图片描述

Spring MVC 也能返回html代码段:

@ResponseBody
@RequestMapping("/test12")
public String Test12() {return "<h1>Hello MVC</h1>";
}

在这里插入图片描述
以上就是本文对Spring MVC 常用注解的全部介绍与使用了,如果后续还有其它调整还会继续补充的!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s使用harbor私有仓库镜像 —— 筑梦之路

官方文档: Secret | Kubernetes ImagePullSecrets的设置是kubernetes机制的另一亮点&#xff0c;习惯于直接使用Docker Pull来拉取公共镜像&#xff0c;但非所有容器镜像都是公开的。此外&#xff0c;并不是所有的镜像仓库都允许匿名拉取&#xff0c;也就是说需要身份认证&…

23 种设计模式

设计模式 1、工厂方法 消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。 2、建造者模式 建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一…

【electron3】electron将数据写入本地数据库

安装 yarn add sqlite3 --save连接并调用数据库&#xff0c;创建表 createDB.ts文件内容 const sqlite3 require(sqlite3) const NODE_ENV process.env.NODE_ENV const path require(path) const { app } require(electron) let DB_PATH path.join(app.getAppPath(), /…

【Linux学习】Linux指令(四)

文章标题 &#x1f680;zip/unzip指令&#xff1a;&#x1f680;tar指令&#xff08;重要&#xff09;&#xff1a;&#x1f680;uname –r指令&#xff1a;&#x1f680;关机指令&#x1f680;几个常用操作 &#x1f680;zip/unzip指令&#xff1a; zip 与 unzip的安装 yum i…

Spring-dataSource事务案例分析-使用事务嵌套时,一个我们容易忽略的地方

场景如下&#xff1a; A_Bean 中的方法a()中调用B_Bean的b();方法都开启了事务&#xff0c;使用的默认的事务传递机制&#xff08;即&#xff1a;属于同一事务&#xff09;&#xff1b; 如下两种场景会存在较大的差异&#xff1a; 在b()方法中出现了异常&#xff0c;在b()中进…

数据库主从备份

1、简介 数据库运⾏时&#xff0c;⼀些因素可能会导致服务运⾏不正常&#xff0c;⽤户访问数据受阻。对于互联⽹公 司&#xff0c;尤其是购物⽹站⽽⾔&#xff0c;这种情况造成的损失是⽆法估量的。因此&#xff0c;对数据库进⾏“备份” 也是必不可少的操作。当主要的数据库死…

MediaStream使用webRtc多窗口传递

最近在做音视频通话&#xff0c;有个需求是把当前会话弄到另一个窗口单独展示&#xff0c;但是会话是属于主窗口的&#xff0c;多窗口通信目前不能直接传递对象&#xff0c;所以想着使用webRtc在主窗口和兄弟窗口建立连接&#xff0c;把主窗口建立会话得到的MediaStream传递给兄…

Unity之XR Interaction Toolkit如何在VR中实现渐变黑屏效果

前言 做VR的时候,有时会有跳转场景,切换位置,切换环境,切换进度等等需求,此时相机的画面如果不切换个黑屏,总会感觉很突兀。刚好Unity的XR Interaction Toolkit插件在2.5.x版本,出了一个TunnelingVignette的效果,我们今天就来分析一下他是如何使用的,然后我们自己再来…

MAC电脑M1安装OpenCV

最近在学习研究OpenCV&#xff0c;奈何只有mac电脑。安装OpenCV感觉还是挺麻烦的&#xff0c;所以记录一下&#xff0c;难免以后会忘记。 安装OpenCV我参考的帖子 https://www.bilibili.com/read/cv23613225/ 一、首先安装Anaconda 目前已安装不做赘述 二、启动命令窗口 方…

ArcGIS无法链接在线地图或错误: 代理服务器从远程服务器收到了错误地址(验证服务器是否正在运行)。

这几天我们分享了&#xff01; 谷歌卫星影像图归来&#xff01;ArcGIS直连&#xff01;快来获取_谷歌影像lyr-CSDN博客文章浏览阅读666次&#xff0c;点赞11次&#xff0c;收藏9次。大概。_谷歌影像lyrhttps://blog.csdn.net/kinghxj/article/details/137521877一套图源搞定&a…

【办公类-22-04】20240418 UIBOT模拟上传每天两篇,获取流量券,并删除内容

背景需求&#xff1a; 前文制作了用UIBOT获取CSCN的3天、5天、7天、12天奖励流量券&#xff0c; 【办公类-22-03】20240417 UIBOT模拟上传获取流量券&#xff0c;并删除内容-CSDN博客文章浏览阅读253次&#xff0c;点赞6次&#xff0c;收藏3次。【办公类-22-03】20240417 UIB…

详解运算符重载,赋值运算符重载,++运算符重载

目录 前言 运算符重载 概念 目的 写法 调用 注意事项 详解注意事项 运算符重载成全局性的弊端 类中隐含的this指针 赋值运算符重载 赋值运算符重载格式 注意点 明晰赋值运算符重载函数的调用 连续赋值 传引用与传值返回 默认赋值运算符重载 前置和后置重载 前…

华为OD机试 - 分披萨 - 动态规划(Java 2024 C卷 200分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

抖去推短视频矩阵系统----源头开发

为什么一直说让企业去做短视频矩阵&#xff1f;而好处就是有更多的流量入口&#xff0c;不同平台或账号之间可以进行资源互换&#xff0c;最终目的就是获客留咨&#xff0c;提单转化。你去看一些做得大的账号&#xff0c;你会发现他们在许多大的平台上&#xff0c;都有自己的账…

HTML5 <video> 标签属性、API 方法、事件、自定义样式详解与实用示例

HTML5 <video> 标签为网页内嵌视频提供了强大且便捷的功能。以下是对 <video> 标签的主要属性、API 方法、事件、自定义样式及其使用示例的详细介绍&#xff1a; 一、属性 1. src 定义&#xff1a;指定视频文件的 URL。示例&#xff1a;<video src"my_v…

【C++杂货铺】继承

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 继承的概念和定义 &#x1f4c2; 概念 &#x1f4c2; 定义 &#x1f4c1; 基类和派生类对象赋值转换 &#x1f4c1; 继承中的作用域 &#x1f4c1; 派生类的默认成员函数 构造函数 析构函数 拷贝构造函数 赋值重载…

有公网IP,如何设置端口映射实现访问?

很多中小型公司或个人会根据自身需求自建服务器&#xff0c;或者将自己内网的服务、应用发布到外网&#xff0c;实现异地访问&#xff0c;如远程桌面、网站、数据库、公司的管理系统、FTP、管家婆、监控系统等等。 没接触过的人可能会觉得这个很难&#xff0c;实际上使用快解析…

Golang插件系统实现

插件可以在解耦的基础上灵活扩展应用功能&#xff0c;本文介绍了如何基于Golang标准库实现插件功能&#xff0c;帮助我们构建更灵活可扩展的应用。原文: Plugins with Go 什么是插件 简单来说&#xff0c;插件就是可以被其他软件加载的软件&#xff0c;通常用于扩展应用程序的功…

[入门]测试层级-ApiHug准备-测试篇-005

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace 这里的测…

学习STM32第十五天

SPI外设 一、简介 STM32F4XX内部集成硬件SPI收发电路&#xff0c;可以由硬件自动执行时钟生成、数据收发等功能&#xff0c;减轻CPU负担&#xff0c;可配置8位/16位数据帧&#xff0c;高位&#xff08;最常用&#xff09;/低位先行&#xff0c;三组SPI接口&#xff0c;支持DMA…