SpringBoot:SpringMVC(上)

文章目录

  • 前言
  • 一、SpringMVC是什么?
    • [1.1 MVC的定义:](#1.1 MVC的定义:)
    • [1.2 MVC 和 Spring MVC 的关系](#1.2 MVC 和 Spring MVC 的关系)
  • [二、Spring MVC 创建和连接](#二、Spring MVC 创建和连接)
    • 2.1创建springmvc
    • [2.2接下来,创建⼀个 UserController 类,实现⽤户到 Spring 程序的互联互通,具体实现代码如下:](#2.2接下来,创建⼀个 UserController 类,实现⽤户到 Spring 程序的互联互通,具体实现代码如下:)
    • [2.1.2 @RequestMapping 注解介绍](#2.1.2 @RequestMapping 注解介绍)
    • [2.1.3 @RequestMapping 是 post 还是 get 请求?](#2.1.3 @RequestMapping 是 post 还是 get 请求?)
    • [2.2 获取参数](#2.2 获取参数)
    • 2.2.1传递参数
    • 2.2.2传递对象
    • [2.2.3 后端参数重命名(后端参数映射)](#2.2.3 后端参数重命名(后端参数映射))
    • [2.2.4@RequestBody 接收JSON对象](#2.2.4@RequestBody 接收JSON对象)
  • 总结

前言

提示:这里可以添加本文要记录的大概内容:


提示:以下是本篇文章正文内容,下面案例可供参考

一、SpringMVC是什么?

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称"Spring Web MVC"来⾃其源模块的名称(Spring-webmvc),但它通常被称为"SpringMVC"。

从上述定义我们可以得出两个关键信息:

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

1.1 MVC的定义:

MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构模式,它把软件系统分

为模型、视图和控制器三个基本部分

Model(模型)是应⽤程序中⽤于处理应⽤程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。

View(视图)是应⽤程序中处理数据显示的部分。通常视图是依据模型数据创建的。

Controller(控制器)是应⽤程序中处理⽤户交互的部分。通常控制器负责从视图读取数据,

控制⽤户输⼊,并向模型发送数据。

1.2 MVC 和 Spring MVC 的关系

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

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

二、Spring MVC 创建和连接

2.1创建springmvc

创建这个就行了

2.2接下来,创建⼀个 UserController 类,实现⽤户到 Spring 程序的互联互通,具体实现代码如下:

java 复制代码
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller // 让 spring 框架启动时,加载
@ResponseBody // 返回⾮⻚⾯数据
@RequestMapping("/user") // 路由器规则注册
public class UserController {
// 路由器规则注册
@RequestMapping("/hi")
public String sayHi(){
return "<h1>Hi,Spring MVC.</h1>";
}
}

这样实现之后,当访问地址:http://localhost:8080/user/hi 时就能打印"hello,spring mvc"的信息

2.1.2 @RequestMapping 注解介绍

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

由映射的

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

当在类上用到这个注解时

java 复制代码
package com.example.demo;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/h")
public class UserController2 {
    @RequestMapping("/hi")
    public String sayHi(){
        return "hello";
    }

}

就把类上的@ReuquestMapping都给写上,@RequestMapping 即可修饰类,也可以修饰⽅法,当修饰类和⽅法时,访问的地址是类 + ⽅

法。

@RequestMapping 也可以直接修饰⽅法,那就直接写方法后面的@RequestMapping

2.1.3 @RequestMapping 是 post 还是 get 请求?

默认情况下时GET的

指定 GET/POST ⽅法类型

java 复制代码
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@Controller
@ResponseBody
@RestController
public class UserController2 {
    @RequestMapping(value = "/hi",method= RequestMethod.POST)
    public String sayHi(){
        return "hello";
    }

}

2.2 获取参数

2.2.1传递参数

java 复制代码
package com.example.demo;
import lombok.Data;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
    @RequestMapping("/m3")
    public String sayHi(String name, String pwd){
        System.out.println(name);
        System.out.println(pwd);
        return "<html><body>Hello from /hi</body></html>";
    }
}

2.2.2传递对象

并且 Spring MVC 可以⾃动实现参数对象的赋值,⽐如 User对象:

java 复制代码
package com.example.demo;

import lombok.Data;

@Data
public class User {
    private String Name;
    private int id;
    private String Password;
}
java 复制代码
package com.example.demo;
import lombok.Data;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
    @RequestMapping("/m3")
    public String sayHi(User u){
        System.out.println(u.getName());
        System.out.println(u.getId());
        return "<html><body>Hello from /hi</body></html>";
    }
}
java 复制代码
http://localhost:8080/m3?name=java&pwd=18

抓包看一下

当然最终执行的结果

当然因为我刚才刷新了一下,所以打印了俩次

2.2.3 后端参数重命名(后端参数映射)

某些特殊的情况下,前端传递的参数 key 和我们后端接收的 key 可以不⼀致,⽐如前端传递了⼀个time 给后端,⽽后端⼜是有 createtime 字段来接收的,这样就会出现参数接收不到的情况,如果出现

这种情况,我们就可以使⽤ @RequestParam 来重命名前后端的参数值

⾮必传参数设置:

如果我们的实际业务前端的参数是⼀个⾮必传的参数,我们可以通过设置 @RequestParam 中的

required=false 来避免不传递时报错,具体实现如下

java 复制代码
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
    @RequestMapping("/m4")
    public String method(@RequestParam("time")String creattime){
        System.out.println("时间:" + creattime);
        return "/index.html";
    }
}

2.2.4@RequestBody 接收JSON对象

java 复制代码
@RequestMapping(value = "/m5", method = RequestMethod.POST)
public Object method_5(@RequestBody Person person) {
System.out.println("Person:" + person);
return "redirect:/index.html";
}

`

总结

先到这里把,欢迎大佬在评论区提意见哦

相关推荐
system_error_x7 小时前
SpringBoot 集成 Thymeleaf 简洁入门
java·spring boot·后端
驭渊的小故事8 小时前
Spring AI Alibaba 实战:从maven依赖治理到声明式工具调用
java·人工智能·spring
Elastic 中国社区官方博客8 小时前
我们如何通过 70 多个拉取请求,将 OpenTelemetry Java agent 迁移到 invokedynamic
java·大数据·开发语言·elasticsearch·搜索引擎·全文检索·es
tyn1888 小时前
记录本地安装nacos服务的方法及异常
java·开发语言
步行cgn9 小时前
Spring MVC 视图机制的核心接口与类
java·开发语言·后端·spring·mvc
y1su9 小时前
Leetcode 字符串模板
java·数据结构·算法·leetcode·职场和发展·动态规划
码事漫谈10 小时前
AI 读你的提示词,其实很没耐心
后端
用户83562907805110 小时前
如何使用 Python 格式化 Excel 单元格中的长文本
后端·python
我命由我1234510 小时前
Python 开发 - Python 的 pathlib
java·开发语言·后端·python·学习·java-ee·学习方法
IT_陈寒10 小时前
Java性能优化完全指南
前端·人工智能·后端