spring boot 接收formdata参数 springboot接收数据

您所在的位置:网站首页 formdata参数怎么看 spring boot 接收formdata参数 springboot接收数据

spring boot 接收formdata参数 springboot接收数据

2024-07-07 03:27| 来源: 网络整理| 查看: 265

后端经常需要和前端进行数据之间的交互,而我们从前端获取的方式主要有下面几种

1)路径中的数据,例如localhost:/user/2,这时我们需要获得路径上的数字2 2)存放到url头里的参数例如localhost:/user?name=zhang 3)存放到body里的数据,使用普通编码格式(下面详细解释)我们可以通过 @requestParam获取 4)存放到body里的json格式数据,使用application/json格式,我们可以使用@requestBody获取

下面我们依次介绍:

@pathVariable url路径上的参数我们可以使用@pathVariable这个注解获得,他也可以和后面的@requestbody和@requestParam一起使用

前台url: localhost:8090/pathTest/sci/2 注意中文会出现问题

@PostMapping("pathTest/{bookType}/{bookId}") public String pathVariableTest(@PathVariable("bookType") String bookType,@PathVariable("bookId") Integer bookId){ return "test"; } //使用@pathVariable这个注解, 最上面url中的{}内可以随便填,但下面@pathVariable里的需要和下面一致

@RequestParam @RequestParam这个注解是最灵活的注解,我们即使不用这个注解,也可以使用它,因为它是默认的,

前端它可以使用url,和body传递

后端它可以同时使用对象和字符串获得

前端 我们知道,http请求有get和post之分,get没有请求体,我们使用get传参为

localhost:8090/paramBodyTest?bookName=java编程思想&bookId=2

而当我们使用post时,一般会将参数写入请求体,即body内,使用的编码格式为 application/x-www-form-urlencoded

后端 后端我们首先可以使用同名的字符串或者其他类型接受单一字符,也可以使用对象javaBean接收(必须写好get,set方法,此例子里book对象包括bookName[String],bookId[int],author[String]三个属性)

当我们不前后端的名字相一致时,我们可以不使用注解,但当不一致时,例如前端属性名为bookName,后端属性名为name,我们使用

@RequestParam(“bookName”)此注解即可 @PostMapping("paramBodyTest") public String ParamBodyTest(@RequestParam("bookName") String name,Book book){ System.out.println(name+book.getBookId()); return "test"; }

spring boot 接收formdata参数 springboot接收数据_json

@RequestBody @RequestBody专作用于请求体格式为application/json时使用,因此http请求为get时无法使用,只有为post时才能使用.而当我们选中application/json这种格式传输数据的时候,我们必须使用@requestBody这一注解,否则程序报错,同理使用了这一注解,前端也只能采用json格式

@RequestBody只能接收一个对象,(同时前端只能传一个),因此当有多个对象时我们也必须合成一个对象使用,@RequestBody也不允许使用字符串接收单个数据,即使前端只传{“name”:“zhang”}这种格式,后台接受也会乱码.

前端传输:使用application/json 传送 {“bookId”:12,“bookName”:“java编程思想”}这个json串

@PostMapping("jsonBodyUrlTest") public String jsonBodyUrlTest(String name,@RequestBody Book book){ return "test"; }

spring boot 接收formdata参数 springboot接收数据_java_02

搭配

@pathVariable可以和其他两种任意搭配, 当http请求为get时,数据放在url传输,只能使用@requestParam 当http请求为post时,可以请求体使用@requestBody,在url使用@RequestParam,此种可以实现 下面我们使用三种方式搭配起来测试一下:

url: localhost:8090/requestTest/2?name=zhang 请求方式: post application/json 数据: {“bookId”:12,“bookName”:“java编程思想”} 接收代码:

@PostMapping("requestTest/{name}") public String jsonBodyUrlTest1(@PathVariable("name")Integer id,@RequestBody Book book,@RequestParam String name){ return "test"; }

spring boot 接收formdata参数 springboot接收数据_http_03

map类型 初次之外我们还可以使用map类型接受数据

前端传送数据,分别为使用请求体application/x-www-form-urlencoded 和application/json格式的相同数据:

{“bookId”:12,“bookName”:“java编程思想”,“name”:“zhang”}

@PostMapping("paramMapTest") public String paramMapTest(@RequestParam Map map){ return "test"; } @PostMapping("bodyMapTest") public String paramMapTest1(@RequestBody Map map){ return "test"; }

最终我们都能得到相同的结果:

spring boot 接收formdata参数 springboot接收数据_java_04

扩充

@requestBody只能使用一次,因为读取json的流只能使用一次,一个方法出现两个注解@RequestBody的结果是报错

实体类无需加@RequestParam, map必须加@RequestParam, 其他字符串等加上@RequestParam必须传值,你也可以加入@RequestParam(value=“mh”, required = false),这样就和不加注解是一样的

url?userName=zh&userName=an即一个url含有多个同名的参数,传到后台是zh,an可以使用数组或者list获取

public String requestparam8(@RequestParam(value="userName") String [] userNames) public String requestparam8(@RequestParam(value="userName") List list)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3