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;
}


相关文章
|
设计模式 前端开发 Java
SpringMVC系列(一)之SpringMVC入门详细介绍
SpringMVC系列(一)之SpringMVC入门详细介绍
|
1月前
|
JSON Java 应用服务中间件
SpringMVC基础
SpringMVC基础
|
6月前
|
JSON 前端开发 Java
SpringMVC概述、SpringMVC的工作流程、创建SpringMVC的项目
SpringMVC概述、SpringMVC的工作流程、创建SpringMVC的项目
40 2
|
11月前
|
存储 JSON 前端开发
SpringMVC基础(下)
SpringMVC基础(下)
|
JSON 前端开发 Java
springMVC基础技术使用
springMVC基础技术使用
44 0
|
存储 XML JSON
一篇让你知道SpringMVC中的所有基础使用技术
一篇让你知道SpringMVC中的所有基础使用技术
47 0
|
关系型数据库 MySQL 数据库
42SpringMVC - SpringMVC小案例
42SpringMVC - SpringMVC小案例
31 0
|
前端开发 Java 应用服务中间件
SpringMVC学习
SpringMVC学习
51 0
|
前端开发 Java 程序员
|
Java 容器 Spring
SpringMVC学习(十一):注解配置SpringMVC
使用配置类和注解代替web.xml和SpringMVC配置文件的功能
140 0