SpringMVC及注解介绍(一)

这篇具有很好参考价值的文章主要介绍了SpringMVC及注解介绍(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.什么是 Spring MVC?

2.创建一个SpringMVC项目

3.MVC定义

4.MVC和SpringMVC的关系

5.如何学SpringMVC

6.SpringMVC注解介绍

1.@RequestMapping

2.@ResponseBody

3.@RestController = @Controller + @ResponseBody

4.更换五大注解

5.@RequestMapping 是 post 还是 get 请求?

6.@GetMapping(设置请求方法)

 7.获取参数

7.1通过对象获取参数

7.2参数重命名@RequestParam

7.3指定接受数据格式

7.3.1@RequestBody将接收到的json数据格式转化为字符串

7.3.2@PathVariable 从url中拿数据(参数必传)


1.什么是 Spring MVC?

Spring Web MVC 是基于Servlet API 构建的原始 Web框架, 从一开始就包含在Spring框架中
及Spring是一个很大的框架, 而SpringMVC只是属于Spring体系中的一个Web模块
所以我们在学习Spring的时候需要通过main方法去访问Bean方法,因为没有引入Web模块,想通过浏览器输入url来访问方法是不可行的

2.创建一个SpringMVC项目

1.创建一个SpringBoot项目

2.删除不必要的文件

3.添加所需要的依赖 

3.MVC定义

MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构模式,它把软件系统分
为模型、视图和控制器三个基本部分

4.MVC和SpringMVC的关系

MVC是一种思想,SpringMVC是对MVC思想的一种具体实现

就等于DI是IoC的一种具体实现一样

总的来说:SpringMVC是一个实现了MVC模式,并继承了ServletAPI的Web框架,当用户在浏览器输入url后,SpringMVC就可以感知到用户的请求

SpringMVC是一切项目的基础

5.如何学SpringMVC

简单来说我们只需要掌握三个功能

  • 连接的功能:将⽤户(浏览器)和 Java 程序连接起来,也就是访问⼀个地址能够调⽤到我们的Spring 程序。
  • 获取参数的功能:⽤户访问的时候会带⼀些参数,在程序中要想办法获取到参数
  • 输出数据的功能:执⾏了业务逻辑之后,要把程序执⾏的结果返回给⽤户

6.SpringMVC注解介绍

1.@RequestMapping

RequestMapping是用来实现url映射的也就是浏览器连接程序的作⽤。

@RequestMapping既可以用来修饰类也可以用来修饰方法,用户访问的url地址就是类+方法

@RequestMapping还需要和五大注解一起使用,将这个类交给spring去管理,这样项目启动的时候,才会被扫描到

接下来要实现的功能是访问地址:http://localhost:8080/user/hi,能打印信息
1.创建⼀个 UserController 类,添加以下代码
SpringMVC及注解介绍(一),springboot,SpringMVC,java

 文章来源地址https://www.toymoban.com/news/detail-599694.html

 结果如下:

SpringMVC及注解介绍(一),springboot,SpringMVC,java

 

由上面的结果截图可以看到,我们返回的是一个html页面数据,这就是以前的MVC,它返回的是一个视图,但现在的项目都是前后端分离项目,所以我们返回的都是数据

2.@ResponseBody

使用ResponseBody注解来告诉前端我们返回的是数据而不是视图

那么现在我们直接返回数据会发生什么呢?

SpringMVC及注解介绍(一),springboot,SpringMVC,java

结果如下: 

SpringMVC及注解介绍(一),springboot,SpringMVC,java 

 可以看到,index.html并不会以页面的形式返回,而是直接显示了文件名

当然现在我们有一个更方便的注解

3.@RestController = @Controller + @ResponseBody

上面的程序可以简化

SpringMVC及注解介绍(一),springboot,SpringMVC,java

但是用这个注解之后,当前类所有方法的返回对象都是数据而不能是视图 

4.更换五大注解

上面我们使用的注解是@Controller,那么我们换成其他的是否还能正常运行出来呢?

我们来试一下@Component

SpringMVC及注解介绍(一),springboot,SpringMVC,java 结果如下: 

SpringMVC及注解介绍(一),springboot,SpringMVC,java

可以看到url访问不了了,如果我们将五大注解都试一遍的话就会发现只有@Controller能访问得了

那么这是什么原因呢?

因为在MVC项目中,url只能通过@Controller来设置

5.@RequestMapping 是 post 还是 get 请求?

使用postman去测试

SpringMVC及注解介绍(一),springboot,SpringMVC,java

SpringMVC及注解介绍(一),springboot,SpringMVC,java 

SpringMVC及注解介绍(一),springboot,SpringMVC,java 

SpringMVC及注解介绍(一),springboot,SpringMVC,java  

我们可以发现,@RequestMapping可以接受get,post以及其他的所有请求,那么如果我们只想让他支持get或post请求呢?

6.@GetMapping(设置请求方法)

我们可以在@RequestMapping后面添加支持的方法

SpringMVC及注解介绍(一),springboot,SpringMVC,java

也可以直接在方法上面加上注解@GetMapping

SpringMVC及注解介绍(一),springboot,SpringMVC,java

这样post方法就访问不到了 

SpringMVC及注解介绍(一),springboot,SpringMVC,java

 7.获取参数

之前servlet项目获取参数的方式就是通过request.getParameter来获取参数值

SpringMVC及注解介绍(一),springboot,SpringMVC,java

 SpringMVC及注解介绍(一),springboot,SpringMVC,java

可以看到通过这样的方式还是可以拿到数据 ,说明在每个方法中都内置了request,response两个参数,那么有没有更简单的方式呢?

其实,在springMVC项目中,我们直接去拿参数也是可以的,就像这样

SpringMVC及注解介绍(一),springboot,SpringMVC,java

SpringMVC及注解介绍(一),springboot,SpringMVC,java

可以看到同样是获取成功了,但是这么写有一个 默认规定就是参数名要与url中的一致,不一致就拿不到了

那么这样可以拿多个参数吗?

我们来测试一下 

SpringMVC及注解介绍(一),springboot,SpringMVC,java

SpringMVC及注解介绍(一),springboot,SpringMVC,java

可以看到同样是成功获取到了 ,并且他还将我们的类型转换成功了

SpringMVC及注解介绍(一),springboot,SpringMVC,java

如果我们传参错误,那么就会报错了

我们刚才使用的是int的包装类Integer,如果我们使用int修饰参数会发生什么呢?

我们来测试一下

SpringMVC及注解介绍(一),springboot,SpringMVC,java

SpringMVC及注解介绍(一),springboot,SpringMVC,java 

可以看到如果不传参,就会报错,并且和之前r的报错信息不一样(Integer不传参输出就是空,不会报错),status=500表示是服务器内部的错误 ,这是为什么呢?因为int基本数据类型不能为空,所以在项目开发中,我们通常使用包装类Integer

我们发现当前这样写,有一个比较严重的问题,代码耦合性太高了,如果参数非常多的话,我们难道还要一个一个写吗?

7.1通过对象获取参数

解决办法就是将他包装成一个对象

SpringMVC及注解介绍(一),springboot,SpringMVC,java

此时我们重新使用对象获取参数 

SpringMVC及注解介绍(一),springboot,SpringMVC,java 

SpringMVC及注解介绍(一),springboot,SpringMVC,java

 可以看到使用对象成功获取到了参数,url传递的参数和对象内的属性对应,如果有一个属性没有传递参数,那么就为null,这就是使用包装类的好处,不会报错,

如果我们多传了参数,传递了对象中没有的属性,那么也不会报错,只是不会显示出来罢了

SpringMVC及注解介绍(一),springboot,SpringMVC,java

此时我们如果需要加参数,那么我们只需要在对象中添加属性就可以了,这样是不是方便了许多呢 ,比如添加一个参数昵称nickname

此时只需要在Student类中添加一个属性nickname

SpringMVC及注解介绍(一),springboot,SpringMVC,java

我们再去访问:

SpringMVC及注解介绍(一),springboot,SpringMVC,java

可以看到添加成功了 

并且通过对象传递参数还有另外一种好处,就是不论前端是通过哪种方式传递的(form表单,浏览器,或者ajax等方式),后端都能接收到,所以我们不必关心前端是如何传递参数的,只要能传过来就好了

我们可以使用postman测试一下前端传递参数能否成功

SpringMVC及注解介绍(一),springboot,SpringMVC,java

 可以看到同样是成功传递了

我们刚才提到,使用对象传递参数的一大前提就是对象的属性必须和前端传递的参数名一致,这样才可以成功接收,但是如果我不想用前端传递过来的参数名称呢?有没有什么别的方法?

7.2参数重命名@RequestParam

使用@RequestParam("username") String name  此时就可以将前端username传递过来的参数值赋值给name了

SpringMVC及注解介绍(一),springboot,SpringMVC,java

SpringMVC及注解介绍(一),springboot,SpringMVC,java 

后端也是成功拿到了数据并返回了 ,此时若是前端使用name传递数据的话,就会报错了

SpringMVC及注解介绍(一),springboot,SpringMVC,java

SpringMVC及注解介绍(一),springboot,SpringMVC,java 我们查看日志发现,username是必传参数

 我们去看看@RequestParam的源码

SpringMVC及注解介绍(一),springboot,SpringMVC,java

 查看@RequestParam的源码发现,他默认就是必传参数,此时我们只需要将required改为false将其修改为非必传参数即可

SpringMVC及注解介绍(一),springboot,SpringMVC,java

我们在重新访问 

SpringMVC及注解介绍(一),springboot,SpringMVC,java

此时就不会报错了,因为username不是必传参数了,但是后端还是拿不到数据,因为name已经重命名前端只能通过username传递了

7.3指定接受数据格式

此时如果我们使用json传递数据那么返回的是什么呢?

SpringMVC及注解介绍(一),springboot,SpringMVC,java

 SpringMVC及注解介绍(一),springboot,SpringMVC,java

 可以看到返回的数据为空,这是为什么呢?

我们使用fiddler抓包去查看

SpringMVC及注解介绍(一),springboot,SpringMVC,java

 好像后端并没有解析出来我们使用json传递的数据

 所以我们需要使用一个注解,@RequestBody将接收到的json数据格式转化为字符串

7.3.1@RequestBody将接收到的json数据格式转化为字符串

SpringMVC及注解介绍(一),springboot,SpringMVC,java

 使用postman测试:

SpringMVC及注解介绍(一),springboot,SpringMVC,java

发现spring成功将json数据接收并转化为字符串格式并且转化成对象返回

那么使用@RequestBody注解后还能接受字符串传参吗?

使用postman测试:

SpringMVC及注解介绍(一),springboot,SpringMVC,java

我们发现报错了,所以使用@RequestBody后就只能接受json格式的数据了

那么如果我们想接受url中传递的数据呢?

7.3.2@PathVariable 从url中拿数据(参数必传)

SpringMVC及注解介绍(一),springboot,SpringMVC,java

使用postman进行测试:

SpringMVC及注解介绍(一),springboot,SpringMVC,java

可以看到后端也是成功拿到了数据并返回

也可以对其进行重命名

SpringMVC及注解介绍(一),springboot,SpringMVC,java

 可以看到同样是成功获取到了数据

SpringMVC及注解介绍(一),springboot,SpringMVC,java

 

 

到了这里,关于SpringMVC及注解介绍(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java 中注解的详细介绍及使用

    Java 注解,也称为 Java Annotations,是一种元数据(Meta-data)标记语言,它在 Java 代码中添加了额外的信息和说明。注解可以用于类、方法、变量、参数、包等各种程序成分上,以达到不同的应用场景。 Java 注解是从 Java 5 开始引入的,在当时就被广泛认为是 Java 语言一个非常重

    2024年02月03日
    浏览(53)
  • Java注解的介绍和使用详细讲解

    注解概述 : Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。 Java 语言中的类、构造器、方法、成员变量、参数等都可以被注解进行标注。 注解的作用 : 对Java中类、方法、成员变量做标记,然后进行特殊处理,至于到底做何种处理由业务需求来决定。 例如

    2024年01月19日
    浏览(35)
  • SpringMVC 注解配置SpringMVC

    使用配置类和注解代替web.xml和SpringMVC配置文件的功能 1、创建初始化类,代替web.xml 在Servlet3.0环境中,容器会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类,如果找到的话就用它来配置Servlet容器。 Spring提供了这个接口的实现,名为SpringServletContainerInitializer,这

    2024年01月24日
    浏览(43)
  • SpringMVC之注解配置SpringMVC

    学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需写作干货注入能量… 热爱写作,愿意让自己成为更好

    2024年02月01日
    浏览(45)
  • Spring 注解 和SpringMVC注解

    Spring和Spring MVC是两个紧密相关但又不同的框架,它们都使用一系列注解来简化开发。以下是Spring和Spring MVC中一些常用的注解: ### Spring 注解: 1. **`@Component`:**    - 用于将类标记为Spring容器中的组件,由Spring自动扫描并进行管理。    - 具体的派生注解有`@Service`、`@Reposit

    2024年01月23日
    浏览(56)
  • java面试【SpringBoot常用注解、linux命令】

    Spring Boot提供了大量的注解,用于简化配置和开发过程。以下是一些常用的Spring Boot注解的列表: 主要注解 : @SpringBootApplication:标记一个主启动类,表示这是一个Spring Boot应用程序的入口点。 控制器相关注解 : @Controller:标记一个类为控制器,处理HTTP请求。 @RestController:

    2024年02月15日
    浏览(52)
  • 【SpringMVC】| SpringMVC执行流程原理 | 常用注解 剥析

    MVC全称Model View Controller,是一种设计创建Web应用程序的模式。这三个单词分别代表Web应用程序的三个部分: Model (模型):指数据模型。用于存储数据以及处理用户请求的业务逻辑。在Web应用中,JavaBean对象,业务模型等都属于Model。 View (视图):用于展示模型中的数据的

    2024年02月06日
    浏览(62)
  • Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 本文主要记录spring的单例bean、切面编程AOP、spring事务、循环依赖、常见注解等 提示:以下是本篇文章正文内容,下面案例可供参考 ① 问题引入 Spring框架中的bean是单例的 singleton :bean在每个Spring IOC容

    2024年02月07日
    浏览(54)
  • 【SpringMVC】@RequestMapping注解(详解)

    SpringMVC汇总: SpringMVC笔记汇总 从注解名称上我们可以看到, @RequestMapping 注解的作用就是将请求和处理请求的控制器方法关联起来,建立映射关系。 SpringMVC 接收到指定的请求,就会来找到在映射关系中对应的控制器方法来处理这个请求。 @RequestMapping 标识一个类:设置映射请

    2024年02月10日
    浏览(41)
  • SpringMVC之@RequestMapping注解

    @RequestMapping注解 (1)@RequestMapping注解的作用就是将请求和处理请求的控制器方法关联起来,建立映射关系。 (2)SpringMVC 接收到指定的请求,就会来找到在映射关系中对应的控制器方法来处理这个请求。 (3)在SpringMVC中如何被使用:浏览器发送请求,若请求地址符合前端控

    2024年02月12日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包