SpringMVC请求和响应

文章目录

        • 1、请求映射路径
        • 2、请求参数
        • 3、五种类型参数传递
          • 3.1、普通参数
          • 3.2、POJO类型参数
          • 3.3、嵌套POJO类型参数
          • 3.4、数组类型参数
          • 3.5、集合类型参数
        • 4、json数据传递
          • 4.1、传递json对象
          • 4.2、传递json对象数组
        • 5、日期类型参数传递
        • 6、响应
          • 6.1、响应页面
          • 6.2、文本数据
          • 6.3、json数据

1、请求映射路径

@RequestMapping注解

  • 名称:@RequestMapping
  • 类型:方法注解 类注解
  • 位置:SpringMVC控制器方法定义上方
  • 作用:设置当前控制器方法请求访问路径,如果设置在类上统一设置当前控制器方法请求访问路径前缀

代码实现

@Controller
//类上方配置的请求映射与方法上面配置的请求映射连接在一起,形成完整的请求映射路径
@RequestMapping("/user")
public class UserController {
    //请求路径映射
    @RequestMapping("/save") //此时save方法的访问路径是:/user/save
    @ResponseBody
    public String save(){
        System.out.println("user save ...");
        return "{'module':'user save'}";
    }
}
2、请求参数

请求方法

  • GET请求
  • POST请求

GET请求传递普通参数

  • 普通参数:url地址传参,地址参数名与形参变量名相同,定义形参即可接收参数
//普通参数:请求参数与形参名称对应即可完成参数传递
@RequestMapping("/commonParam")
@ResponseBody
public String commonParam(String name ,int age){
    System.out.println("普通参数传递 name ==> "+name);
    System.out.println("普通参数传递 age ==> "+age);
    return "{'module':'common param'}";
}

POST请求传递普通参数

  • 普通参数:form表单post请求传参,表单参数名与形参变量名相同,定义形参即可接收参数
//普通参数:请求参数与形参名称对应即可完成参数传递
@RequestMapping("/commonParam")
@ResponseBody
public String commonParam(String name ,int age){
    System.out.println("普通参数传递 name ==> "+name);
    System.out.println("普通参数传递 age ==> "+age);
    return "{'module':'common param'}";
}

问题:我们发现,POST请求传递的参数如果包含中文那么就会出现中文乱码问题,那么如何解决呢?

POST请求中文乱码处理

在加载SpringMVC配置的配置类中指定字符过滤器。

public class ServletConfigInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
  
    //乱码处理
    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        return new Filter[]{filter};
    }
}
3、五种类型参数传递

五种类型参数介绍

  • 普通参数
  • POJO类型参数
  • 嵌套POJO类型参数
  • 数组类型参数
  • 集合类型参数
3.1、普通参数
  • 普通参数:当请求参数名与形参变量名不同,使用@RequestParam绑定参数关系
//普通参数:请求参数名与形参名不同时,使用@RequestParam注解关联请求参数名称与形参名称之间的关系
@RequestMapping("/commonParamDifferentName")
@ResponseBody
public String commonParamDifferentName(@RequestParam("name") String userName , int age){
    System.out.println("普通参数传递 userName ==> "+userName);
    System.out.println("普通参数传递 age ==> "+age);
    return "{'module':'common param different name'}";
}
  • 名称:@RequestParam
  • 类型:形参注解
  • 位置:SpringMVC控制器方法形参定义前面
  • 作用:绑定请求参数与处理器方法形参间的关系
  • 参数:
    • required:是否为必传参数
    • defaultValue:参数默认值
3.2、POJO类型参数
  • POJO参数:请求参数名与形参对象属性名相同,定义POJO类型形参即可接收参数
/**
	pojo类
*/
public class User {
    private String name;
    private int age;
    //添加getter/setter/toString()方法
}
//POJO参数:请求参数与形参对象中的属性对应即可完成参数传递
@RequestMapping("/pojoParam")
@ResponseBody
public String pojoParam(User user){
    System.out.println("pojo参数传递 user ==> "+user);
    return "{'module':'pojo param'}";
}

**注意事项:**请求参数key的名称要和POJO中属性的名称一致,否则无法封装。

3.3、嵌套POJO类型参数
  • POJO对象中包含POJO对象
public class User {
    private String name;
    private int age;
    private Address address;
    //添加getter/setter/toString()方法
}
public class Address {
    private String province;
    private String city;
    //添加getter/setter/toString()方法
}
  • 嵌套POJO参数:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数

image-20240202215514273

//嵌套POJO参数:嵌套属性按照层次结构设定名称即可完成参数传递
@RequestMapping("/pojoContainPojoParam")
@ResponseBody
public String pojoContainPojoParam(User user){
    System.out.println("pojo嵌套pojo参数传递 user ==> "+user);
    return "{'module':'pojo contain pojo param'}";
}

**注意事项:**请求参数key的名称要和POJO中属性的名称一致,否则无法封装。

3.4、数组类型参数
  • 数组参数:请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型即可接收参数
//数组参数:同名请求参数可以直接映射到对应名称的形参数组对象中
@RequestMapping("/arrayParam")
@ResponseBody
public String arrayParam(String[] likes){
    System.out.println("数组参数传递 likes ==> "+ Arrays.toString(likes));
    return "{'module':'array param'}";
}
3.5、集合类型参数
  • 集合保存普通参数:请求参数名与形参集合对象名相同且请求参数为多个,@RequestParam绑定参数关系

image-20240202215746741

//集合参数:同名请求参数可以使用@RequestParam注解映射到对应名称的集合对象中作为数据
@RequestMapping("/listParam")
@ResponseBody
public String listParam(@RequestParam List<String> likes){
    System.out.println("集合参数传递 likes ==> "+ likes);
    return "{'module':'list param'}";
}
4、json数据传递

json数据参数介绍

  • json普通数组([“”,“”,“”,…])
  • json对象({key:value,key:value,…})
  • json对象数组([{key:value,…},{key:value,…}])

使用json数据传递需要添加依赖

添加json数据转换相关坐标

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.0</version>
</dependency>

开启自动转换json数据的支持,@EnableWebMvc

@Configuration
@ComponentScan("com.itheima.controller")
//开启json数据类型自动转换
@EnableWebMvc
public class SpringMvcConfig {
}

注意事项:@EnableWebMvc注解功能强大,该注解整合了多个功能,此处仅使用其中一部分功能,即json数据进行自动类型转换

@EnableWebMvc注解介绍

  • 名称:@EnableWebMvc
  • 类型:配置类注解
  • 位置:SpringMVC配置类定义上方
  • 作用:开启SpringMVC多项辅助功能
  • 范例:
@Configuration
@ComponentScan("com.demo.controller")
@EnableWebMvc
public class SpringMvcConfig {
}

@RequestBody注解介绍

  • 名称:@RequestBody
  • 类型:形参注解
  • 位置:SpringMVC控制器方法形参定义前面
  • 作用:将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次
  • 范例:
@RequestMapping("/listParamForJson")
@ResponseBody
public String listParamForJson(@RequestBody List<String> likes){
    System.out.println("list common(json)参数传递 list ==> "+likes);
    return "{'module':'list common for json param'}";
} 
4.1、传递json对象
  • POJO参数:json数据与形参对象属性名相同,定义POJO类型形参即可接收参数
//POJO参数:json格式
//1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc
//2.使用@RequestBody注解将外部传递的json数据映射到形参的实体类对象中,要求属性名称一一对应
@RequestMapping("/pojoParamForJson")
@ResponseBody
public String pojoParamForJson(@RequestBody User user){
    System.out.println("pojo(json)参数传递 user ==> "+user);
    return "{'module':'pojo for json param'}";
}
4.2、传递json对象数组
  • POJO集合参数:json数组数据与集合中每个对象的属性名相同,定义List类型形参即可接收参数
public class User {
    private String name;
    private Integer age;
}
//集合参数:json格式
//1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc
//2.使用@RequestBody注解将外部传递的json数组数据映射到形参的保存实体类对象的集合对象中,要求属性名称一一对应
@RequestMapping("/listPojoParamForJson")
@ResponseBody
public String listPojoParamForJson(@RequestBody List<User> list){
    System.out.println("list pojo(json)参数传递 list ==> "+list);
    return "{'module':'list pojo for json param'}";
}
5、日期类型参数传递

格式

  • 日期类型数据基于系统不同格式也不尽相同
    2088-08-18
    2088/08/18
    08/18/2088
  • 接收形参时,根据不同的日期格式设置不同的接收方式

image-20240202220357280

使用@DateTimeFormat注解设置日期类型数据格式,默认格式yyyy/MM/dd

//日期参数 http://localhost:80/dataParam?date=2088/08/08&date1=2088-08-18&date2=2088/08/28 8:08:08
@RequestMapping("/dataParam")
@ResponseBody
public String dataParam(Date date,
                  @DateTimeFormat(pattern="yyyy-MM-dd") Date date1,
                  @DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss") Date date2){
    System.out.println("参数传递 date ==> "+date);
    System.out.println("参数传递 date1(yyyy-MM-dd) ==> "+date1);
    System.out.println("参数传递 date2(yyyy/MM/dd HH:mm:ss) ==> "+date2);
    return "{'module':'data param'}";
}

@DateTimeFormat注解介绍

  • 名称:@DateTimeFormat

  • 类型:形参注解

  • 位置:SpringMVC控制器方法形参前面

  • 作用:设定日期时间型数据格式

  • 属性:pattern:指定日期时间格式字符串

6、响应
6.1、响应页面
@Controller
public class UserController {

    //响应页面/跳转页面
    //返回值为String类型,设置返回值为页面名称,即可实现页面跳转
    @RequestMapping("/toJumpPage")
    public String toJumpPage(){
        System.out.println("跳转页面");
        return "page.jsp";
    }
}
6.2、文本数据
//响应文本数据
//返回值为String类型,设置返回值为任意字符串信息,即可实现返回指定字符串信息,需要依赖@ResponseBody注解
@RequestMapping("/toText")
@ResponseBody
public String toText(){
    System.out.println("返回纯文本数据");
    return "response text";
}
6.3、json数据
//响应POJO对象
//返回值为实体类对象,设置返回值为实体类类型,即可实现返回对应对象的json数据,需要依赖@ResponseBody注解和@EnableWebMvc注解
@RequestMapping("/toJsonPOJO")
@ResponseBody
public User toJsonPOJO(){
    System.out.println("返回json对象数据");
    User user = new User();
    user.setName("itcast");
    user.setAge(15);
    return user;
}
//响应POJO集合对象
//返回值为集合对象,设置返回值为集合类型,即可实现返回对应集合的json数组数据,需要依赖@ResponseBody注解和@EnableWebMvc注解
@RequestMapping("/toJsonList")
@ResponseBody
public List<User> toJsonList(){
    System.out.println("返回json集合数据");
    User user1 = new User();
    user1.setName("小林");
    user1.setAge(15);

    User user2 = new User();
    user2.setName("小小林");
    user2.setAge(12);

    List<User> userList = new ArrayList<User>();
    userList.add(user1);
    userList.add(user2);

    return userList;
}

**注意:**需要添加jackson-databind依赖以及在SpringMvcConfig配置类上添加@EnableWebMvc注解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/366137.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring速成(三)

文章目录 Spring速成&#xff08;三&#xff09;1&#xff0c;AOP简介1.1 什么是AOP?1.2 AOP作用1.3 AOP核心概念 2&#xff0c;AOP入门案例2.1 需求分析2.2 思路分析2.3 环境准备2.4 AOP实现步骤步骤1:添加依赖步骤2:定义接口与实现类步骤3:定义通知类和通知步骤4:定义切入点…

刨析数据结构(二)

&#x1f308;个人主页&#xff1a;小田爱学编程 &#x1f525; 系列专栏&#xff1a;数据结构————"带你无脑刨析" &#x1f3c6;&#x1f3c6;关注博主&#xff0c;随时获取更多关于数据结构的优质内容&#xff01;&#x1f3c6;&#x1f3c6; &#x1f600;欢迎…

d3dcompiler_47.dll是什么文件,如何解决找不到d3dcompiler_47.dll文件

d3dcompiler_47.dll是一个属于微软DirectX组件的动态链接库文件&#xff0c;它是Direct3D编译器的一部分&#xff0c;主要用于在Windows操作系统中编译和运行Direct3D 11应用程序和游戏。当你在电脑上尝试打开某些依赖Direct3D图形技术的软件或游戏时&#xff0c;如果系统找不到…

Flume搭建

压缩包版本&#xff1a;apache-flume-1.9.0-bin.tar 百度盘链接&#xff1a;https://pan.baidu.com/s/1ZhSiePUye9ax7TW5XbfWdw 提取码&#xff1a;ieks 1.解压 tar -zxvf /opt/software/apache-flume-1.9.0-bin.tar.gz -C /opt/module/ 2. 修改文件名 [rootbigdata1 opt]…

基于SpringBoot Vue超市管理系统

大家好✌&#xff01;我是Dwzun。很高兴你能来阅读我&#xff0c;我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结&#xff0c;还为大家分享优质的实战项目&#xff0c;本人在Java项目开发领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#x…

Codeforces Round 169 (Div. 2) D 异或最大值 二进制

题目&#xff1a; Problem - 276D - Codeforces 思路&#xff1a; l < r 1. l r &#xff0c;异或的结果为0 2. l < r &#xff08;注意&#xff1a;二进制位中&#xff0c;某一位是1,这一位后面的全是1&#xff0c;也没这个1大&#xff0c;比如1000 > 0111&…

HCIP-Datacom(H12-821)81-90题解析

有需要完整题库的同学可以私信博主&#xff0c;博主看到会回复将文件发给你&#xff01;&#xff08;麻烦各位同学给博主推文点赞关注和收藏哦&#xff09; 81、在状态检测防火墙中&#xff0c;开启状态检测机制时&#xff0c;三次握手的第二个报文(SYNACK)到达防火墙的时候如…

最新!2024顶级SCI优化!TTAO-CNN-BiGRU-MSA三角拓扑聚合优化、双向GRU融合注意力的多变量回归预测程序!

适用平台&#xff1a;Matlab 2023版及以上 TTOA三角聚合优化算法&#xff0c;将在2024年3月正式发表在中科院1区顶级SCI期刊《Expert Systems with Applications》上。 该算法提出时间极短&#xff0c;目前以及近期内不会有套用这个算法的文献。新年伊始&#xff0c;尽快拿下…

什么是在线教育,在线教育系统开源版本搭建教程

引言 随着数字化时代的到来&#xff0c;教育领域也在经历着一场深刻的变革。在线教育作为一种新兴的教育形式&#xff0c;正在以其灵活性和便利性受到越来越多人的关注和青睐。本文将介绍在线教育的概念&#xff0c;并提供基于开源版本的在线教育系统搭建教程&#xff0c;让教…

Docker容器引擎(5)

目录 一.docker-compose docker-compose的三大概念&#xff1a; yaml文件格式&#xff1a; json文件格式&#xff1a; docker-compose 配置模板文件常用的字段&#xff1a; 二.Docker Compose 环境安装&#xff1a; 查看版本&#xff1a; 准备好nginx 的dockerfile的文…

mysql本地数据库连接失败?

情景&#xff1a;mysql本地连接失败&#xff0c;账号密码都没问题。 原因&#xff1a;本地mysql服务没有启动 解决方案&#xff1a; 1、进入本地mysql安装的bin目录下D:\mysql-8.0.35-winx64\mysql-8.0.35-winx64\bin&#xff08;我的&#xff09;&#xff1b; 2、执行net st…

Android使用ScrollView导致鼠标点击事件无效

平台 测试平台: RK3288 Android8.1RK3588 Android 12 问题 首先, 这个问题的前提是, 使用的输入设备是**鼠标**, 普通的触摸屏并不会出现这个问题. 大致的流程是APP的UI布局中采用ScrollView作为根容器, 之后添加各类子控件, 在一起准备就绪后, 使用鼠标进行功能测试, 出现…

【Oracle云】OCI DevOps Services 教程 (3) - 创建自动化部署流水线【CD流水线】

欢迎来到【Oracle云】OCI DevOps Services教程的第三部分&#xff01;在这一部分中&#xff0c;我们将介绍如何在OCI上创建自动化部署流水线&#xff0c;也称为持续部署&#xff08;CD&#xff09;流水线。OCI DevOps Services提供了一套标准的构建工具&#xff0c;帮助我们简化…

解决WARNING: IPv4 forwarding is disabled. Networking will not work的具体操作步骤

IPv4转发禁用警告&#xff1a;网络无法正常工作 在使用网络连接的过程中&#xff0c;我们可能遇到警告消息“WARNING: IPv4 forwarding is disabled. Networking will not work”&#xff08;警告&#xff1a;IPv4转发已禁用&#xff0c;网络将无法正常工作&#xff09;。这个…

2.2号作业

一 1.A 2. A 3. A 4. D 5. D 6. B 7. A 8. C 9. A 10. 二 1. 42 2. cerr 3. cout <<"\n" 4. 5 5. 0 6. 7. 20 8. 1.50 9. ssi2 i…

UE4学习笔记 FPS游戏制作2 制作第一人称控制器

文章目录 章节目标前置概念Rotator与Vector&#xff1a;roll与yaw与pitch 添加按键输入蓝图结构区域1区域2区域3区域4 章节目标 本章节将实现FPS基础移动 前置概念 Rotator与Vector&#xff1a; Vector是用向量表示方向&#xff0c;UE中玩家的正前方是本地坐标系的(1,0,0)&…

ARM架构可视化ROS消息方案部署

ARM架构可视化ROS消息方案部署 三种方案, 1. webviz 2. foxglove 3. rosviz 注: web要用firefox, chromimum用不了, 可能是因为取消了时间同步机制的原因 先说三种方案的优劣, webviz 延迟比较高, 但是部署相对简单, foxglove 部署比较费劲, 但是效果不错, 延迟低, 本文会尽…

k8s kubeadm部署安装详解

目录 kubeadm部署流程简述 环境准备 步骤简述 关闭 防火墙规则、selinux、swap交换 修改主机名 配置节点之间的主机名解析 调整内核参数 所有节点安装docker 安装依赖组件 配置Docker 所有节点安装kubeadm&#xff0c;kubelet和kubectl 定义kubernetes源并指定版本…

带大家做一个,易上手的家常芹菜炒腊肉

起锅 放入腊肉 加入清水 水包裹住腊肉即可 盖上盖子煮15分钟 一把芹菜 芹菜切段 清水洗干净 15分钟后 捞出腊肉 将腊肉切片 一块生姜 两瓣蒜 将蒜切片 单独装起来 生姜切片 和三个干辣椒装一起 起锅 下腊肉 不要放油 腊肉够油了 翻炒开后 倒入生姜 干辣椒 翻炒个一分…

STM32CAN2进入bus off 模式

工作遇到的问题记录 无人机CAN2整个进不了中断&#xff0c;通过查看寄存器判定出CAN节点进入了bus off mode 为何进入bus off &#xff0c;最后通过示波器看到整个CAN2总线波形就不对&#xff0c;总线出现了错误 Busoff的产生是一定是因为节点自身识别到自己发送错误&#xff…
最新文章