SpringMVC基础(上)

简介: SpringMVC基础(上)

SpringMVC基础


SpringWebMVC是基于ServletAPI构建的原始Web框架,从⼀开始就包含在Spring框架中。


MVC理论基础


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

942f69767c5a7d819ce3e2f0ddd97ec5.png

  1. View(视图)指在应⽤程序中专⻔⽤来与浏览器进⾏交互,展⽰数据的资源
  2. Model(模型)是应⽤程序的主体部分,⽤来处理程序中数据逻辑的部分
  3. Controller(控制器)可以理解为⼀个分发器,⽤来决定对于视图发来的请求,需要⽤哪⼀个模型来处理,以及处理完后需要跳回到哪⼀个视图,⽤来连接视图和模型

Spring在实现MVC时,也结合⾃⾝项⽬的特点,做了⼀些改变:

a66f510e3b881ac1b94332675d0d1546.png

学习SpringMVC重点也就是学习如何通过浏览器和⽤⼾程序进⾏交互

主要分以下三个⽅⾯:

  1. 建⽴连接:将⽤⼾/浏览器和Java程序连接起来,也就是访问⼀个地址能够调⽤到我们的Spring程序
  2. 请求:⽤⼾请求的时候会带⼀些参数,在程序中要想办法获取到参数,所以请求这块主要是获取参数的功能
  3. 响应:执⾏了业务逻辑之后,要把程序执⾏的结果返回给⽤⼾,也就是响应


第一个SpringMVC程序


在SpringMVC中使⽤ @RequestMapping 来实现URL路由映射

创建⼀个UserController类:

@RestController
public class HelloController {
    @ResponseBody
    @RequestMapping("/")
    public String hello() {
        return "Hello,world";
    }
}


效果:

f6d1b3f5095b50c407a81022a9e44ee2.png


请求


@RequestMapping

@RequestMapping 是⽤来注册接⼝的路由映射的

当⽤⼾访问⼀个URL时,将⽤⼾的请求对应到程序中某个类的某个⽅法的过程就叫路由映射

@RequestMapping即可修饰类,也可以修饰⽅法:

  1. @RequestMapping标识⼀个类:设置映射请求的请求路径的初始信息
  2. @RequestMapping标识⼀个⽅法:设置映射请求请求路径的具体信息
  3. 当修饰类和⽅法时,访问的地址是类路径+⽅法路径


注意:

  1. @RequestMapping 的URL路径也可以是多层路径
  2. @RequestMapping的URL路径最前⾯加不加 / (斜杠)都可以,Spring程序启动时,如果前⾯没有加会拼接上 /
  3. @RequestMapping 既⽀持Get请求,⼜⽀持Post请求,也⽀持其他的请求⽅式

指定GET/POST⽅法类型:

@RequestMapping(value = "/getRequest",method= RequestMethod.GET)
@RequestMapping(value = "/postRequest",method= RequestMethod.POST)


传递单参

接收单个参数,在SpringMVC中直接⽤⽅法中的参数就可以

@RestController
public class HelloController {
    @ResponseBody
    @RequestMapping("/")
    public String hello(String name) {
        return "Hello,world"+name;
    }
}


09f71fcce9d0a9126eedb469259b8ee9.png


注意:

  1. 使⽤基本类型来接收参数时,参数必须传(除boolean类型),否则会报500错误;类型不匹配时,会报400错误
  2. 对于包装类型,如果不传对应参数,Spring接收到的数据则为null
  3. 对于参数可能为空的数据,建议使⽤包装类型


传递多参

和接收单个参数⼀样,直接使⽤⽅法的参数接收即可

@RestController
public class HelloController {
    @ResponseBody
    @RequestMapping("/")
    public String hello(String name,int age) {
        return "Hello,world"+name+age;
    }
}


1df90036e91a66baad9d87c5933691fa.png

注意:

前后端进⾏参数匹配时,是以参数的名称进⾏匹配的,因此参数的位置是不影响后端获取参数的结果


传递对象

如果参数⽐较多时,⽅法声明就需要有很多形参,并且后续每次新增⼀个参数,也需要修改⽅法声明,这样不利于代码的维护

可以将这些参数封装为⼀个对象,SpringMVC可以⾃动实现对象参数的赋值

@Data
public class Person {
    String name;
    String sex;
    int age;
}
@RestController
public class HelloController {
    @ResponseBody
    @RequestMapping("/")
    public String hello(Person person) {
        return "Hello,world person:"+ person.getName()+person.getAge()+person.getSex();
    }
}


15b2dd0f4562a233dac1838d2efe77d5.png

注意:

Spring会根据参数名称⾃动绑定到对象的各个属性上,如果某个属性未传递,则赋值为null(基本类型则赋值为默认初识值,⽐如int类型的属性,会被赋值为0)


传递数组和集合

SpringMVC可以⾃动绑定数组参数的赋值

@RequestMapping("/m2")
public String m2(String[] str) {
    return "Hello,world str:"+ Arrays.toString(str);
}


deae93d62ae7d611b341885ac1dd4bd1.png

集合参数:和数组类似,需要使⽤ @RequestParam 绑定参数关系

默认情况下,请求中参数名相同的多个值,是封装到数组;如果要封装到集合,要使⽤@RequestParam 绑定参数关系

@RequestMapping("/m3")
public String m3(@RequestParam List<String> str) {
    return "Hello,world str:"+ str;
}


传递JSON数据

JSON的语法:

  1. 数据在 键值对(Key/Value) 中
  2. 数据由逗号 , 分隔
  3. 对象⽤ {} 表⽰
  4. 数组⽤ [] 表⽰
  5. 值可以为对象,也可以为数组,数组中可以包含多个对象


JSON优点:

  1. 简单易⽤:语法简单,易于理解和编写,可以快速地进⾏数据交换
  2. 跨平台⽀持:JSON可以被多种编程语⾔解析和⽣成,可以在不同的平台和语⾔之间进⾏数据交换和传输
  3. 轻量级:相较于XML格式,JSON数据格式更加轻量级,传输数据时占⽤带宽较⼩,可以提⾼数据传输速度
  4. 易于扩展:JSON的数据结构灵活,⽀持嵌套对象和数组等复杂的数据结构,便于扩展和使⽤
  5. 安全性:JSON数据格式是⼀种纯⽂本格式,不包含可执⾏代码,不会执⾏恶意代码,因此具有较⾼的安全性

基于以上特点,JSON在Web应⽤程序中被⼴泛使⽤,如前后端数据交互、API接⼝数据传输等

接收JSON对象,需要使⽤ @RequestBody 注解:

@RequestMapping("/m4")
public String m4(@RequestBody Person person) {
    return "Hello,world person:"+ person;
}


3386feab76387ad34702e7489ec721aa.png


@RequestParam

前端传递的参数key和我们后端接收的key可以不⼀致,可以使⽤ @RequestParam 来重命名前后端的参数值,进行构建映射关系

@ResponseBody
@RequestMapping("/m1")
public String m1(@RequestParam("name") String str) {
    return "Hello,world name:"+ str;
}


注意:

  1. 使⽤ @RequestParam 进⾏参数重命名时,请求参数只能和 @RequestParam 声明的名称⼀致,才能进⾏参数绑定和赋值
  2. 使⽤ @RequestParam 进⾏参数重命名时,参数就变成了必传参数


分析注解:

@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestParam {
    @AliasFor("name")
    String value() default "";
    @AliasFor("value")//起别名
    String name() default "";
    boolean required() default true;//默认开启必传
    String defaultValue() default "\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n";//默认数值
}


设置非必传参数:

@RequestMapping("/m1")
public String m1(@RequestParam(value = "name",required = false) String str) {
    return "Hello,world name:"+ str;
}


相关文章
|
NoSQL Java Redis
SpringBoot集成Redis解决表单重复提交接口幂等(亲测可用)
SpringBoot集成Redis解决表单重复提交接口幂等(亲测可用)
705 0
|
监控 关系型数据库 数据库
rds的安全性
rds的安全性
465 7
|
SQL Oracle 关系型数据库
若依框架---PageHelper分页(七)
若依框架---PageHelper分页(七)
300 0
|
数据可视化 Python
神操作!用 Python 操作 xmind 绘制思维导图!
在平时的工作中当我们要总结一些知识的时候就需要一款工具来画画流程图,这里推荐 XMind 软件,用 Xmind 绘制的思维导图看起来思路清晰,那么今天的文章介绍关于思维导图的相关知识以及用 Python 如何操作 Xmind 绘制思维导图。
2143 0
神操作!用 Python 操作 xmind 绘制思维导图!
|
数据可视化 数据挖掘 图形学
R语言基础可视化:使用ggplot2构建精美图形的探索
【8月更文挑战第29天】 `ggplot2`是R语言中一个非常强大的图形构建工具,它基于图形语法提供了一种灵活且直观的方式来创建各种统计图形。通过掌握`ggplot2`的基本用法和美化技巧,你可以轻松地将复杂的数据转化为直观易懂的图形,从而更好地理解和展示你的数据分析结果。希望本文能够为你探索`ggplot2`的世界提供一些帮助和启发。
|
9月前
|
NoSQL 关系型数据库 分布式数据库
PolarDB图数据库快速入门
图数据库(Graph Database)专门存储图数据,适合处理社交网络、知识图谱等复杂关系。它使用图查询语言(如Cypher、Gremlin)进行操作。PolarDB兼容OpenCypher语法,支持创建、查询、更新和删除图数据,包括模式匹配、过滤、MERGE避免重复、可视化工具等功能,简化了图数据的管理和应用。
|
运维 Kubernetes Cloud Native
拥抱云原生:Kubernetes 在现代应用部署中的实践
【8月更文挑战第31天】在数字化转型的浪潮中,云原生技术成为推动企业创新和效率提升的关键力量。本文将深入探讨如何利用 Kubernetes,这一强大的容器编排工具,来部署和管理现代应用。我们将从基础架构搭建开始,一步步引导您配置集群,并通过实际代码示例演示如何部署一个简单的应用。无论您是云原生新手还是希望深化理解,这篇文章都将为您提供实操经验和理论知识的融合之旅。
|
12月前
|
算法 前端开发
一文了解贪心算法和回溯算法在前端中的应用
该文章深入讲解了贪心算法与回溯算法的原理及其在前端开发中的具体应用,并通过分析LeetCode题目来展示这两种算法的解题思路与实现方法。
|
Java Spring
【Java】Spring boot快速上手(二):参数传递
【Java】Spring boot快速上手(二):参数传递
224 0