Spring请求与响应——请求

这篇具有很好参考价值的文章主要介绍了Spring请求与响应——请求。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Spring请求与响应——请求

不知道是否还对这个图有印象,我们该开始理解一下交互问题了。

我们举个示例来理解吧(我们用下面这个结构来举例):
Spring请求与响应——请求

请求映射路径

@@RequestMapping()

还记得什么是映射路径嘛?这玩意不能重名哦~,比如下面这种情况就会报错
Spring请求与响应——请求
我们修改也很简单,按照名字和路径给完整就好了比如:

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

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

  • 当类上和方法上都添加了@RequestMapping注解,前端发送请求的时候,要和两个注解的value值相加匹配才能访问到。
  • @RequestMapping注解value属性前面加不加/都可以

请求参数

请求路径设置好后,只要确保页面发送请求地址和后台Controller类中配置的路径一致,就可以接收到前端的请求,接收到请求后,就该接收页面传递的参数了。
请求参数的传递与接收是和请求方式有关系的,目前比较常见的两种请求方式为:GET、POST
我们以这个结构举例:
Spring请求与响应——请求

Get

Get发请求参数

发送请求与参数(我们以普通参数举例下面介绍其他类型):
Spring请求与响应——请求
很简单吧跟在后面,有多个的话用“&”符号连接就好了。

接收Get请求参数
//普通参数:请求参数与形参名称对应即可完成参数传递
    @RequestMapping("/commonParam")
    @ResponseBody
    public String commonParam(String name ,int age){
        System.out.println("普通参数传递 name ==> "+name);
        System.out.println("普通参数传递 age ==> "+age);
        return "{'module':'common param'}";
    }
  • 值得注意的是,我们在Idea中后台可能看到中文的请求符号可能会出现乱码Tomcat8.5以后的版本才处理了中文乱码的问题,所以出现乱码需要修改pom.xml来解决GET请求中文乱码问题
    Spring请求与响应——请求
    Spring请求与响应——请求

POST

POST发送参数

post请求的参数在请求体内:
Spring请求与响应——请求

接收当然是一样的啦;值得注意的是如果出现中文乱码,可以使过滤器:

 //乱码处理
    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        return new Filter[]{filter};//多个过滤器用逗号隔开
    }

当然如果你的参数名称不一样,我们可以使用@RequestParam注解,来绑定请求参数与形参映射关系,举个例子吧:还是上面那个请求name,age
Spring请求与响应——请求

参数种类

五种请求类型

  • 普通参数
  • POJO类型参数
  • 嵌套POJO类型参数
  • 数组类型参数
  • 集合类型参数

普通类型我们在认识Get与Post的时候已经介绍过了就不赘述了。

POJO类型参数

GET或POST来发送请求和数据,所携带的数据都是比较简单的数据,如果参数多呢,一个一个加在那里肯定不符合简洁开发咯,我们肯定是把那些参数组织成一个实体类比如name+age=User类。

对没错,POJO就是把这些形参组成一个类,用这个类传递,🍊个🌰:

//POJO参数:请求参数与形参对象中的属性对应即可完成参数传递
    @RequestMapping("/pojoParam")
    @ResponseBody
    public String pojoParam(User user){
        System.out.println("pojo参数传递 user ==> "+user);
        return "{'module':'pojo param'}";
    }

如果只是简单的组成一个类就罢了但是;
走过路过不要错过,加个🌰,万一我们的参数里嵌套有引用类型呢(其他类比如User可以有地址):

Spring请求与响应——请求

//嵌套POJO参数:嵌套属性按照层次结构设定名称即可完成参数传递
    @RequestMapping("/pojoContainPojoParam")
    @ResponseBody
    public String pojoContainPojoParam(User user){
        System.out.println("pojo嵌套pojo参数传递 user ==> "+user);
        return "{'module':'pojo contain pojo param'}";
    }
  • POJO参数接收,前端GET和POST发送请求数据的方式不变。
  • 请求参数key的名称要和POJO中属性的名称一致,否则无法封装
数组类型类型参数
  • 接收:
//数组参数:同名请求参数可以直接映射到对应名称的形参数组对象中
    @RequestMapping("/arrayParam")
    @ResponseBody
    public String arrayParam(String[] likes){
        System.out.println("数组参数传递 likes ==> "+ Arrays.toString(likes));
        return "{'module':'array param'}";
    }
  • 请求:
  • Spring请求与响应——请求
    看看后台吧:
    Spring请求与响应——请求
集合类型参数

值得注意的是:SpringMVC会将List看做是一个POJO对象来处理,将其创建一个对象并准备把前端的数据封装到对象中,但是List是一个接口无法创建对象,所以会报错报错。

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

Spring请求与响应——请求
这个时候 @RequestParam 就该出场了。

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

@DateTimeFormat(pattern="yyyy-MM-dd ")
@DateTimeFormat(pattern=“yyyy/MM/dd HH:mm:ss”)

**//日期参数
    //使用@DateTimeFormat注解设置日期类型数据格式,默认格式yyyy/MM/dd
    @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'}";
    }**

Spring请求与响应——请求

名称 @DateTimeFormat
类型 形参注解
位置 SpringMVC控制器方法形参前面
作用 设定日期时间型数据格式
相关属性 pattern:指定日期时间格式字符串
名称 @RequestParam
类型 形参注解
位置 SpringMVC控制器方法形参定义前面
作用 绑定请求参数与处理器方法形参间的关系
相关参数 required:是否为必传参数
defaultValue:参数默认值

JSON数据传输参数

我们现在一般异步调用。前后台以异步方式进行交换,传输的数据使用的是JSON,下来我们看看前端如果发送的是JSON数据,后端如何接收。

  • 对于JSON数据类型,我们常见的有三种:
    • json普通数组([“value1”,“value2”,“value3”,…])
    • json对象({key1:value1,key2:value2,…})
    • json对象数组([{key1:value1,…},{key2:value2,…}])

前期准备如下:

  • SpringMVC默认使用的是jackson来处理json的转换,所以需要在pom.xml添加jackson依赖
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.0</version>
</dependency>
  • 开启SpringMVC注解支持
    • 在SpringMVC的配置类中开启SpringMVC的注解支持,这里面就包含了将JSON转换成对象的功能。
@Configuration
@ComponentScan("com.taro.controller")
//开启json数据类型自动转换
@EnableWebMvc
public class SpringMvcConfig {
}
发送请求

Spring请求与响应——请求

接收请求

@RequestBody

集合参数与pojo参数演示
//集合参数:json格式
    //1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc
    //2.使用@RequestBody注解将外部传递的json数组数据映射到形参的集合对象中作为数据
    @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'}";
    }
//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'}";
    }

```java
//集合参数: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'}";
    }

简单看一下josn格式吧,这是之前pojo的例子:
Spring请求与响应——请求

Spring请求与响应——请求文章来源地址https://www.toymoban.com/news/detail-430308.html

名称 @EnableWebMvc
类型 配置类注解
位置 SpringMVC配置类定义上方
作用 开启SpringMVC多项辅助功能
名称 @RequestBody
类型 形参注解
位置 SpringMVC控制器方法形参定义前面
作用 将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次
@RequestBody与@RequestParam区别
  • 区别
    • @RequestParam用于接收url地址传参,表单传参【application/x-www-form-urlencoded】
    • @RequestBody用于接收json数据【application/json】
  • 应用
    • 后期开发中,发送json格式数据为主,@RequestBody应用较广
    • 如果发送非json格式数据,选用@RequestParam接收请求参数
  • 重新巩固下SpringMVCSpringMVC接收JSON数据的实现步骤为:
    (1)导入jackson包
    (2)使用PostMan发送JSON数据
    (3)开启SpringMVC注解驱动,在配置类上添加@EnableWebMvc注解
    (4)Controller方法的参数前添加@RequestBody注解

到了这里,关于Spring请求与响应——请求的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Spring MVC学习】连接 && 接收请求参数 && 响应返回参数

    目录 前言:认识Spring MVC 🌷1、什么是MVC? 一、建立连接(5个注解) 🌷1、@RequestMapping注解:注册接⼝的路由映射(默认返回页面) 🌷2、@ResponseBody注解:表示返回的是数据 🌷 3、组合注解@RestController = @ResponseBody + @Controller 🌷4、支持Get请求的2种写法@GetMapping + @RequestMapp

    2024年02月16日
    浏览(39)
  • spring boot如何实现对应用系统进行请求加密、响应加密处理

    参考文档:https://blog.csdn.net/zhuocailing3390/article/details/125054315 通过实现 RequestBodyAdvice 接口,对前端请求的参数进行解密并且重新让真实结构的数据进入到Controller中; 通过实现 ResponseBodyAdvice 接口,将响应的参数进行加密,返回到前端; 扩展: 可以通过自定义注解,实现对指

    2024年02月07日
    浏览(39)
  • Spring/SpringBoot 过滤器修改、获取http 请求request中的参数 和 response返回值,比如修改请求体和响应体的字符编码

    通过自定义filter,RequestWrapper,ResponseWrapper 处理请求和响应数据,比如修改请求体和响应体的字符编码 1.request 和 response 中的数据都是 存在流中的(缓存中)获取一次就没有了,需要重新写回去。所以需要两个包装类分别继承HttpServletRequestWrapper 和 HttpServletResponseWrapper 对 r

    2024年02月15日
    浏览(39)
  • Spring基础(Web-MVC)——在idea中新建springWeb项目 & 浏览器请求 和 服务器响应 & SpringMvc文件相关

    mvc是啥,springMvc是啥,如何搭建springWeb项目, 在springMvc下的request和response怎么发请求,怎么进行响应? springMvc处理文件相关:上传文件,uuid改名,静态资源映射,yaml配置路径,spring配置文件初步; 表现(视图)层:WEB层,用来和客户端进行数据交互的。 servlet-controller 业务层

    2024年02月03日
    浏览(45)
  • 请求响应-响应-案例

    加载并解析emp.xml文件中的数据,完成数据处理,并在页面展示 emp.xml文件代码如下: 在pom.xml文件中引入dom4j的依赖,用于解析XML文件 引入资料中提供解析XML的工具类XMLParserUtils、对应的实体类Emp、XML文件emp.xml 引入资料中提供的静态文件,放在resource下的static目录下 编写Con

    2024年02月15日
    浏览(39)
  • Java http 响应式请求和非响应式请求有什么区别

    以下是一个使用Spring WebFlux实现真正的流式编程的案例: 运行Spring Boot应用程序,并使用浏览器或类似cURL的工具发送GET请求: 获取所有用户的请求:http://localhost:8080/users/stream 你将会看到一个持续不断的流式响应,每秒钟返回一个用户对象。这个案例中,我们使用了 @GetMapp

    2024年01月17日
    浏览(63)
  • HTTP请求响应详解 (HTTP请求数据格式,常见请求方式,后端响应参数)及Apifox(postman)使用方式

    目录 一.HTTP协议  二.HTTP请求数据格式  请求方式 三.后端响应请求 基于SpringBoot响应数据 请求响应的参数类型 同一响应格式 四.Apifox(postman)使用方法 HTTP(Hypertext Transfer Protocol,超文本传输协议)是一种用于传输超媒体文档(如HTML)的应用层协议。 HTTP的特点和工作原理如下

    2024年03月09日
    浏览(66)
  • Node.js-http模块服务端请求与响应操作,请求报文与响应报文

    简单案例创建HTTP服务端: 端口号被占用: 1.关闭当前正在运行监听端口的服务 2.修改其他的端口号 获取请求方式类型 获取请求的 url 地址 通过实例化 URl 对象获取路径与查询字符串 获取 http 协议的版本号 获取 http 的请求头 响应报文组成: 1.响应行 :包含:HTTP 版本号、响

    2024年02月14日
    浏览(47)
  • Java Restful API接口获取请求头、请求体、以及设置响应状态码、应答(响应)体等

    一、获取请求头 接口示例1: 1、从 request 对象中获取请求头: 二、获取请求体 1、从 request 对象中,使用缓冲流读取器、stream流等方式获取请求体 推荐写法一:

    2024年02月16日
    浏览(45)
  • HTTP 和 HTTPS(请求响应报文格式 + 请求方法 + 响应状态码 + HTTPS 加密流程 + Cookie 和 Session)

    HTTP 全称 “ 超文本传输协议 ”,是一种基于传输层 TCP 协议实现的应用非常广泛的 应用层协议 我们平时打开一个网站,就是通过 HTTP 协议来传输数据的 当我们在浏览器中访问一个 “ 网址 ”(URL),浏览器就会给这个 URL 的服务器发送一个 HTTP 请求,服务器返回一个 HTTP 响

    2023年04月19日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包