Spring MVC 中的常见注解的用法(上)

简介: Spring MVC 中的常见注解的用法

认识 Spring MVC


什么是 Spring MVC


Spring MVC(正式名称:Spring Web MVC) 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。


  1. Spring MVC 是⼀个 Web 框架
  2. Spring MVC 是基于 Servlet API 构建的

MVC 的定义


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



5403782abb4a4e1e9329da93d8d6f371.png

MVC 执行流程:


  1. 用户的请求首先到 Controller
  2. Controller 将请求转发给 Model
  3. Model 处理业务并将数据结果返回给 Controller
  4. Controller 将处理的数据发给 View
  5. View 将数据转换成页面发送给用户


MVC 是⼀种思想,⽽ Spring MVC 是对 MVC 思想的具体实现。

总结来说,Spring MVC 是⼀个实现了 MVC 模式,并继承了 Servlet API 的 Web 框架。既然是 Web框架,那么当⽤户在浏览器中输⼊了 url 之后,我们的 Spring MVC 项⽬就可以感知到⽤户的请求.


在创建 Spring Boot 项⽬时,我们勾选的 Spring Web 框架其实就是 Spring MVC 框架。


Spring MVC 注解的运用


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

1. Spring MVC 的连接


首先创建一个 TestController 类,来实现用户与 Spring 程序的交互:


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller   //让该类随着 Spring 框架启动而加载
@ResponseBody   //返回非页面数据(这个注解在返回数据中讲解)
//@RestController 相当于@Controller + @ResponseBody
@RequestMapping("/test")   //路由器规则注册(一级路由)
public class TestController {
    @RequestMapping("/hi")    //路由器规则注册(二级路由)
    public String sayHi() {
        System.out.println("hi Spring MVC");
        return "<h1> 你好 Spring MVC <h1>";
    }
}


通过浏览器地址访问,来与程序交互:e83b2e1515c44c81a2829b976de34d3d.png


3bc2bf2d224f459998f31c9072354762.png


可以看到,通过我们访问地址 http://localhost:8080/test/hi 就可以执行sayHi 方法,并返回字符串到页面上了。


这里注意:

spring mvc 项目默认扫描路径是启动类所在的包下所有的子包,也就是说:我们新建的的类要想放入 IoC 中,就得在该包下创建类。(默认启动类是在 demo 包下)

ac231e1bd8103eaf4ab013e92a4e1161_5b7429ddab674f3685b9da9bc832f77f.png


@RequestMapping 注解


@RequestMapping 是 Spring Web 应⽤程序中最常被⽤到的注解之⼀,它是⽤来注册接⼝的路由映射的。


路由映射:所谓的路由映射指的是,当⽤户访问⼀个 url 时,将⽤户的请求对应到程序中某个类的某个⽅法的过程就叫路由映射。


@RequestMapping 即可修饰类,也可以修饰⽅法,当修饰类和⽅法时,访问的地址是类 + ⽅法。

@RequestMapping 也可以直接修饰⽅法,代码实现如下:

a1ff838a0f9e43e1a0665fc44f44596e.png

9e2be5f91cd94a389662e890718e29e1.png

默认情况下,@RequestMapping 是支持 post 和 get 请求的,我们用 Postman 来验证一下:

get 请求:


1c725ee8a5641da913b96c5de9754789_c7d3f8b69cc34cde99fa88699a47b98e.png

post 请求:

d8a6d5aba3f580c1a137549433992312_d376f88c59604bc995b7ccea97431218.png

在有些情况下,我们可能要该注解只支持其中一种请求,那要怎么实现呢?


  1. 只支持 get 请求的注解方式
@RestController
@RequestMapping("/test")
public class TestController {
  //方式一
  //下面 value 也可以改为 path
    @RequestMapping(value = "/hi",method = RequestMethod.GET)
    public String sayHi() {
        System.out.println("hi Spring MVC");
        return "<h1> 你好 Spring MVC <h1>";
    }
    //方式二
    @GetMapping("/hhh")
    public String hhh() {
        return "hello world";
    }
}

这里就只演示一下方式一:


注意,浏览器通过 url 来访问地址, 默认是 get 请求。

再通过 Postman 来构造一下 post 请求:

782afd3300c49a2b20b865980aa61b34_4e473ac54bd14d6fba228172bde4ef97.png

2. 只支持 post 请求的注解方式


@RestController
@RequestMapping("/test2")
public class Test2Controller {
    //方式一
    @RequestMapping(path = "/hi",method = RequestMethod.POST)
    public String sayHi() {
        return "你好";
    }
    //方式二
    @PostMapping("/hhh")
    public String hhh() {
        return "你好,世界!";
    }
}


这里通过浏览器直接访问就报错了:

b98e952f4ed04510a82d05cc1f5e3614.png


通过 Postman 构建 post 请求:

33330b505c34a9cf6551d6c3d287e21f_137216324448484fb70c7d02d551d787.png


相关文章
|
1月前
|
Java Spring 容器
如何解决spring EL注解@Value获取值为null的问题
本文探讨了在使用Spring框架时,如何避免`@Value(&quot;${xxx.xxx}&quot;)`注解导致值为null的问题。通过具体示例分析了几种常见错误场景,包括类未交给Spring管理、字段被`static`或`final`修饰以及通过`new`而非依赖注入创建对象等,提出了相应的解决方案,并强调了理解框架原理的重要性。
106 4
|
16天前
|
Java Spring
在使用Spring的`@Value`注解注入属性值时,有一些特殊字符需要注意
【10月更文挑战第9天】在使用Spring的`@Value`注解注入属性值时,需注意一些特殊字符的正确处理方法,包括空格、引号、反斜杠、新行、制表符、逗号、大括号、$、百分号及其他特殊字符。通过适当包裹或转义,确保这些字符能被正确解析和注入。
|
5天前
|
XML JSON Java
SpringBoot必须掌握的常用注解!
SpringBoot必须掌握的常用注解!
23 4
SpringBoot必须掌握的常用注解!
|
29天前
|
XML Java 数据格式
Spring从入门到入土(bean的一些子标签及注解的使用)
本文详细介绍了Spring框架中Bean的创建和使用,包括使用XML配置文件中的标签和注解来创建和管理Bean,以及如何通过构造器、Setter方法和属性注入来配置Bean。
59 9
Spring从入门到入土(bean的一些子标签及注解的使用)
|
7天前
|
存储 缓存 Java
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
40 2
|
7天前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
25 1
|
21天前
|
架构师 Java 开发者
得物面试:Springboot自动装配机制是什么?如何控制一个bean 是否加载,使用什么注解?
在40岁老架构师尼恩的读者交流群中,近期多位读者成功获得了知名互联网企业的面试机会,如得物、阿里、滴滴等。然而,面对“Spring Boot自动装配机制”等核心面试题,部分读者因准备不足而未能顺利通过。为此,尼恩团队将系统化梳理和总结这一主题,帮助大家全面提升技术水平,让面试官“爱到不能自已”。
得物面试:Springboot自动装配机制是什么?如何控制一个bean 是否加载,使用什么注解?
|
1天前
|
存储 安全 Java
springboot当中ConfigurationProperties注解作用跟数据库存入有啥区别
`@ConfigurationProperties`注解和数据库存储配置信息各有优劣,适用于不同的应用场景。`@ConfigurationProperties`提供了类型安全和模块化的配置管理方式,适合静态和简单配置。而数据库存储配置信息提供了动态更新和集中管理的能力,适合需要频繁变化和集中管理的配置需求。在实际项目中,可以根据具体需求选择合适的配置管理方式,或者结合使用这两种方式,实现灵活高效的配置管理。
6 0
|
26天前
|
XML Java 数据库
Spring boot的最全注解
Spring boot的最全注解
|
25天前
|
JSON 前端开发 Java
SSM:SpringMVC
本文介绍了SpringMVC的依赖配置、请求参数处理、注解开发、JSON处理、拦截器、文件上传下载以及相关注意事项。首先,需要在`pom.xml`中添加必要的依赖,包括Servlet、JSTL、Spring Web MVC等。接着,在`web.xml`中配置DispatcherServlet,并设置Spring MVC的相关配置,如组件扫描、默认Servlet处理器等。然后,通过`@RequestMapping`等注解处理请求参数,使用`@ResponseBody`返回JSON数据。此外,还介绍了如何创建和配置拦截器、文件上传下载的功能,并强调了JSP文件的放置位置,避免404错误。