SpringMVC请求与响应

news2024/11/23 13:28:26

文章目录

  • 请求与响应
    • 请求映射路径
    • 请求传参
      • 传递普通参数
      • 传递实体类参数
      • 传递数组参数
      • 传递集合参数
      • 传递JSON参数
      • 传递日期参数
    • 响应数据

请求与响应

请求映射路径

请求映射路径是通过注解: @RequestMapping

类型:方法注解, 类注解

位置:SpringMVC控制器方法定义上方

作用:设置当前控制器方法请求访问路径,如果设置在类上统一设置当前控制器方法请求访问路径前缀

属性: value(默认), 请求访问路径,或访问路径前缀

// 当前控制器添加@ResponseBody注解
@ResponseBody
@RequestMapping("/save")
public String save(){
  	System.out.println("user save ...");
  	return "{'info':'springmvc'}";
}
// 当前类添加注解, 设置请求访问路径

@Controller
@RequestMapping("/book")
public class BookController {
    @RequestMapping("/save")
    @ResponseBody
    public String save() {
        System.out.println("book save...");
        return "{'module': 'book save'}";
    }
}

请求传参

传递普通参数

GET请求传递普通参数:url地址传参,地址参数名与形参变量名相同,定义形参即可接收参数

地址参数名和形参变量名相同:

示例请求: http://localhost:8080/commonParam?name=chenyq&age=18

@Controller
public class UserController {
    @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请求传参,表单参数名与形参变量名相同,定义形参即可接收参数

@Controller
public class UserController {
    @RequestMapping("/commonParam")
    @ResponseBody
    public String commonParam(String name, int age) {
        System.out.println("普通参数传递 name ===> " + name);
        System.out.println("普通参数传递 age ===> " + age);
        return "{'module': 'common param'}";
    }
}

当请求传递的参数名和形参变量名不一致时, 我们也可以使用@RequestParam注解绑定请求参数与处理器方法形参间的关系

例如url地址传递参数名是name, 形参变量名使用username, 我们可以使用注解将name和username绑定起来

@RequestParam注解参数

  • required:是否为必传参数
  • defaultValue:参数默认值

示例请求: http://localhost:8080/commonParam?name=chenyq&age=18

@Controller
public class UserController {
    @RequestMapping("/commonParam")
    @ResponseBody
  	// @RequestParam注解绑定地址参数名
    public String commonParam(@RequestParam("name") String username, int age) {
        System.out.println("普通参数传递 name ===> " + username);
        System.out.println("普通参数传递 age ===> " + age);
        return "{'module': 'common param'}";
    }
}

Post请求中文乱码处理

为web容器添加过滤器并指定字符集,Spring-web包中提供了专用的字符过滤器

public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
  	// post请求乱码处理
    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("utf-8");
        return new Filter[]{filter};
    }
  
    protected Class<?>[] getRootConfigClasses() {
        return new Class[0];
    }

    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }

    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

传递实体类参数

POJO参数:请求的参数名与形参对象属性名相同,定义POJO类型形参即可接收参数

User实体类

public class User {
    private String name;
    private int age;
}

需要保证传递参数的变量名和对象属性名保持一致

示例请求: http://localhost:8080/pojoParam?name=chenyq&age=19

@Controller
public class UserController {
    @RequestMapping("/pojoParam")
    @ResponseBody
    public String pojoParam(User user) {
        System.out.println("pojo参数传递 user ===>" + user);
        return "{'module': 'pojo param'}";
    }
}

嵌套POJO参数:POJO对象中包含POJO对象

User实体类中嵌套了Address实体类

public class User {
    private String name;
    private int age;
    private Address address;
}

Address实体类

public class Address {
    private String province;
    private String city;
}

嵌套POJO参数:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数

方法中无变化, 通过实体类参数依然可以接收

示例请求: http://localhost:8080/pojoParam?name=chenyq&age=19&address.province=chongqing&address.city=chongqing

@Controller
public class UserController {
    @RequestMapping("/pojoParam")
    @ResponseBody
    public String pojoParam(User user) {
        System.out.println("pojo嵌套参数传递 user ===>" + user);
        return "{'module': 'pojo param'}";
    }
}

传递数组参数

数组参数:请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型形参即可接收参数

例如接收用户有哪些爱好: 请求地址中多个参数的变量名都使用同一个数组名即可接收

示例请求: http://localhost:8080/springmvc_03_request/arrayParam?likes=game&likes=music

例如参数1likes, 参数2likes, 与形参的数组名likes一致即可接收

@Controller
public class UserController {
    @RequestMapping("/arrayParam")
    @ResponseBody
    public String arrayParam(String[] likes) {
        System.out.println("数组参数传递 likes ===>" + Arrays.toString(likes));
        return "{'module': 'array param'}";
    }
}

传递集合参数

集合保存普通参数:请求参数名与形参集合对象名相同且请求参数为多个,@RequestParam绑定参数关系

传递集合参数需要使用@RequestParam注解绑定关系

示例请求: http://localhost:8080/listParam?likes=aaa&likes=bbb

@Controller
public class UserController {
    @RequestMapping("/listParam")
    @ResponseBody
    public String listParam(@RequestParam List<String> likes) {
        System.out.println("集合参数传递 likes ===>" + likes);
        return "{'module': 'list param'}";
    }
}

传递JSON参数

接收请求中的JSON数据步骤如下:

添加json数据转换相关坐标

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

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

  • @EnableWebMvc注解功能强大,该注解整合了多个功能,此处仅使用其中一部分功能,即json数据进行自动类型转换
@Configuration
@ComponentScan("com.chenyq.controller")
@EnableWebMvc
public class SpringMvcConfig {
}

设置接收json数据

@RequestBody注解, 将请求中请求体所包含的数据传递给形参参数,此注解一个处理器方法只能使用一次

@Controller
public class UserController {
    @RequestMapping("/listJsonParam")
    @ResponseBody
    public String listJsonParam(@RequestBody List<String> likes) {
        System.out.println("集合参数传递 likes ===>" + likes);
        return "{'module': 'json list param'}";
    }
}

Postman设置发送json数据(请求body中添加json数据)

在这里插入图片描述

@RequestBody与@RequestParam区别:

区别:

@RequestParam用于接收url地址传参,表单传参【application/x-www-form-urlencoded】

@RequestBody用于接收json数据【application/json】

应用:

后期开发中,发送json格式数据为主,@RequestBody应用较广

如果发送非json格式数据,选用@RequestParam接收请求参数

传递日期参数

日期类型数据基于系统不同格式也不尽相同

2088-08-18

2088/08/18

08/18/2088

接收形参时,需要使用@DateTimeFormat注解, 根据不同的日期格式设置不同的接收方式

@DateTimeFormat写在控制器方法的形参前面, 通过属性pattern日期时间格式字符串, 设定日期时间型数据格式

示例请求: http://localhost:8080/dateParam?date=21/09/2022 22:30:00

@Controller
public class UserController {
    @RequestMapping("/dateParam")
    @ResponseBody
    public String dateParam(@DateTimeFormat(pattern = "dd/MM/yyyy HH:mm:ss") Date date) {
        System.out.println("date参数传递 date ===> " + date);
        return "{'module': 'date param'}";
    }
}

响应数据

响应页面(了解)

只需要返回页面名称的字符串

@Controller
public class UserController {
@RequestMapping("/toJumpPage")
public String toJumpPage() {
    System.out.println("跳转页面");
    return "index.jsp";
}

响应文本数据(了解)

@Controller
public class UserController {
    @RequestMapping("/toText")
    @ResponseBody
    public String toText() {
        System.out.println("响应文本数据");
        return "response Text";
    }
}

响应json数据-实体类对象转json

我们配置的json转换坐标, 会自动将pojo对象转换为json数据

@Controller
public class UserController {
    @RequestMapping("/toJson")
    @ResponseBody
    public User toJsonPojo() {
        System.out.println("返回JSON对象数据");
        // 创建一个User对象并返回
        User user = new User("chenyq", 18);
        return user;
    }
}

响应json数据-对象集合转json数组

@Controller
public class UserController {
    @RequestMapping("/toJsonList")
    @ResponseBody
    public List<User> toJsonList() {
        System.out.println("返回JSON对象集合数据");
        // 创建list集合, 添加User对象并返回
        List<User> list = new ArrayList<User>();
        User user1 = new User("chenyq", 18);
        User user2 = new User("kaisa", 20);
        list.add(user1);
        list.add(user2);
        return list;
    }
}

@ResponseBody注解: 设置当前控制器的返回值为响应体, 如果返回值是字符串就返回String, 如果是一个对象, 就转换为JSON再作为响应体

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

少儿编程 中国电子学会图形化编程等级考试Scratch编程一级真题解析(判断题)2023年3月

2023年3月scratch编程等级考试一级真题 判断题(共10题,每题2分,共20分) 26、在角色列表区和造型标签页都可以修改角色的名称。 答案:错 考点分析:考查Scratch平台使用,只有角色区可以修改角色的造型名称,造型标签不能修改,所以答案错误 27、可以在角色中切换舞台的…

Java核心技术 卷1-总结-7

Java核心技术 卷1-总结-7 lambda 表达式方法引用构造器引用变量作用域异常分类声明受查异常 lambda 表达式 方法引用 有时&#xff0c; 可能已经有现成的方法可以完成你想要传递到其他代码的某个动作。例如&#xff0c; 假设你希望只要出现一个定时器事件就打印这个事件对象。…

使用@Scope注解设置组件的作用域

前言 Spring容器中的组件默认是单例的&#xff0c;在Spring启动时就会实例化并初始化这些对象&#xff0c;并将其放到Spring容器中&#xff0c;之后&#xff0c;每次获取对象时&#xff0c;直接从Spring容器中获取&#xff0c;而不再创建对象。 1.Scope注解概述 Scope注解能…

【uni-app】【01】底部导航栏与页面切换

1.(配置文件在哪)uni-app 路由控制是在 pages.json文件中的。 2.(基本配置项有哪些)初学的时候主要有三个配置项&#xff0c;①pages ② globalStyle ③ tabbar [!TOC] 接下来主要是对这三个配置项做一个简单介绍。 pages 负责页面管理。不需要自己写的&#xff0c;你在项目的p…

【Scala入门】scala基础语法:类和对象,变量和常量

上一篇请移步【Scala入门】Scala下载及安装&#xff08;Windows&#xff09;以及Idea创建第一个scala项目_水w的博客-CSDN博客 目录 一、Scala 二、Scala基础语法 2.1 注释与标识符规范 2.2 变量与常量 【案例&#xff1a;变量声明和赋值】 2.3 object 【案例&#xff1…

合并二叉树-递归法

1题目 给你两棵二叉树&#xff1a; root1 和 root2 。 想象一下&#xff0c;当你将其中一棵覆盖到另一棵之上时&#xff0c;两棵树上的一些节点将会重叠&#xff08;而另一些不会&#xff09;。你需要将这两棵树合并成一棵新二叉树。合并的规则是&#xff1a;如果两个节点重叠…

gdb调试常用指令及案例讲解

文章目录 前言一、常用指令二、案例说明1、测试源文件2、编译和调试 三、其他指令四、案例说明 前言 GDB是一个由GNU开源组织发布的、UNIX/LINUX 操作系统下的、基于命令行的、功能强大的程序调试工具。 GDB 支持断点、单步执行、打印变量、观察变量、查看寄存器、查看堆栈等调…

【JavaEE】_2.文件与IO

目录 1.文件概述 1.1 文件的概念 1.2 文件的存储 1.3 文件的分类 1.4 目录结构 1.5 文件操作 1.5.1 文件系统操作 1.5.2 文件内容操作 2. Java文件系统操作 2.1 File类所处的包 2.2 构造方法 2.3 方法 2.3.1 与文件路径、文件名有关的方法 2.3.2 文件是否存在与普…

Java核心技术 卷1-总结-13

Java核心技术 卷1-总结-13 具体的集合散列集树集队列与双端队列优先级队列 映射基本映射操作 具体的集合 散列集 链表和数组可以有序的存储元素。但是&#xff0c;如果想要查看某个指定的元素&#xff0c;却又忘记了它的位置&#xff0c;就需要访问所有元素&#xff0c;直到找…

vue2数据响应式原理(5) 通过重写函数实现数组响应式监听

其实 我们之前对数组的一个监听 还并不是很完美 我们打开案例 打开 output.js 更改代码如下 import { observe } from "./dataResp" const output () > {var obj {data: {data: {map: {dom: {isgin: true}},arg: 13},name: "小猫猫"},bool: [1,2,3,4…

【经验与Bug】tensorflow草记

文章目录 1 常用小知识2 Learn1) 疑惑未解2) 为何要有"bias"&#xff1f; 3 问题处理1) jupyter的环境指定目录运行jupyter 2) Keras版本3) 为什么accuracy为100%&#xff0c;迭代时参数还在更新&#xff1f; 1 常用小知识 conda activate tf 在anaconda prompt使用&…

Android studio 播放音频文件 播放语速

一、使用 public class MainActivity extends AppCompatActivity {private Hsvolume mHsVolume null;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mHsVolume new Hsvolume(th…

【YOLO系列】YOLOv1论文笔记

论文链接&#xff1a;[1506.02640] You Only Look Once: Unified, Real-Time Object Detection (arxiv.org) YOLO将目标检测看作回归问题&#xff0c;使用单个神经网络直接从完整图像上预测边界框和类别概率。&#xff08;端到端&#xff1a;输入原始数据&#xff0c;输出的是最…

E5EAA HENF105240R1将用于工业生产过程的测量、控制和管理

​E5EAA HENF105240R1将用于工业生产过程的测量、控制和管理 工业控制计算机是工业自动化控制系统的核心设备 工业控制计算机是工业自动化设备和信息产业基础设备的核心。传统意义上&#xff0c;将用于工业生产过程的测量、控制和管理的计算机统称为工业控制计算机&#xff0c;…

SpringBoot整合WebSocket的两种方式及微服务网关Gateway配置

一、说明 项目中后台微服务需要向前端页面推送消息&#xff0c;因此不可避免的需要用到WebSocket技术。SpringBoot已经为WebSocket的集成提供了很多支持&#xff0c;只是WebSocket消息如何通过微服务网关Spring Cloud Gateway向外暴露接口&#xff0c;实际开发过程中遇到了很多…

【数据结构第四章】- 串的模式匹配算法(BF 算法和 KMP 算法/用 C 语言实现)

目录 一、前言 二、BF 算法 三、KMP 算法 3.2.1 - KMP 算法的原理 3.2.2 - KMP 算法的实现 3.2.3 - KMP 算法的优化 创作不易&#xff0c;可以点点赞&#xff0c;如果能关注一下博主就更好了~ 一、前言 子串的定位运算通常称为串的模式匹配或串匹配。此运算的应用非常广…

美国主机的带宽和网络速度究竟有多快?

在选择一个主机时&#xff0c;其带宽和网络速度是非常重要的考虑因素。而美国主机在带宽和网络速度方面有着明显的优势&#xff0c;成为了众多用户的首选。那么&#xff0c;美国主机的带宽和网络速度究竟有多快呢?本文将通过分析美国主机的网络基础设施和数据中心设施&#xf…

golang入门项目——打卡抽奖系统

功能介绍 用户加入群组之后&#xff0c;会在签到群组所设的签到地点进行签到和签退&#xff0c;并限制同一个设备只能签到一个用户&#xff0c;签到成功之后。会获取一定的限制在该群组使用的积分。该群组可以设置一些抽奖活动&#xff0c;用户可使用该群组内的积分来进行该群…

Python+mysql+php搭建另类免费代理池

文章目录 前言:思路&#xff1a;开干&#xff1a;php连接MySQL取ip和端口&#xff1a;效果图&#xff1a; 最后调用代理池&#xff1a;总结&#xff1a; 前言: 为什么说另类的&#xff0c;因为我完全是按照我自己的想法来的&#xff0c;比较鸡肋&#xff0c;但是能用&#xff…

短视频app开发:如何提高视频播放稳定性

简介 如今&#xff0c;短视频已经成为人们日常生活中不可或缺的一部分&#xff0c;而短视频app的开发也日益成为了人们热议的话题。在短视频app开发的过程中&#xff0c;如何提高视频播放稳定性是一个非常重要的问题。本文将从短视频源码角度出发&#xff0c;分享提高短视频ap…