@RequestParam、@PathVariable、 @RequestBody用法
Get和Post请求
- get方式的请求是没有请求体的。但是get有query string parameter 。比如
url?name=zhangsan
- post请求发现了两种请求体。一种是FromData形式的请求体,一种是request payload形式的。这个可以F12查看network
- post请求体是通过请求头中的Content-Type来区分的
- formData形式的Content-Type为
application/x-www-form-urlencoded
* - request payload形式的请求体Content-Type为
application/json或multipart/form-data
@PathVariable
定义URL变量规则(restful风格)
@RequestMapping(value="/user/{username}")
- 单个删除的时候,使用DELETE方式。例如 user/del/{id}。
- 批量删除的时候,使用DELETE方式。例如user/dels/{ids}。
- 这里的ids是用逗号分隔成的字符串后台用@PathVariable注解接收映射成
List<String> ids
形式的数据。
- 这里的ids是用逗号分隔成的字符串后台用@PathVariable注解接收映射成
@RequestParam
【post】@RequestParam注解接收formData形式的请求体参数。
【get】get有query string parameter 。比如
url?id=2020
@RequestMapping(value="/user")
public String getUserBlog(@RequestParam(value="id") int blogId) {
return "blogId="+blogId;
}
@RequestMapping("/allbook")
@ResponseBody
public Map<String, Object> listAll(@RequestParam(value = "bookName",required = false)String bookName){
System.out.println(bookName);
List<Books> list = bookService.selectBookByName(bookName);
Map<String, Object> map = new HashMap<String, Object>();
map.put("code", 0);
map.put("msg", "");
map.put("data", list);
return map;
}
@RequestParam(value = "bookName",required = false)
要求字段为空也可以,默认是非空
@RequestBody
【post】@RequestBody注解接收request payload形式的请求体参数,后台可以直接是map对象
@RequestBody主要用来接收前端传递给后端的json字符串(
contentType:"application/json
)。GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用。
一个请求,只有一个RequestBody;一个请求,可以有多个RequestParam。
一般使用ajax提交数据给后台,后台接受到一个对象(对象需要有无参构造器和get/set),
@RequestMapping("/stu/add")
@ResponseBody
public Map<String,Object> add(@RequestBody Student student){
System.out.println("进入添加");
Map<String,Object> map = new HashMap<String, Object>();
student.setUUID(UUID.randomUUID().toString().replace("-",""));
System.out.println(student);
if(stuService.addStu(student)>0){
map.put("status","1");
}else{
map.put("status","0");
}
return map;
}
如果没加contentType:"application/json",那么data就应该对应的是json对象;反之,如果加了contentType:"application/json",那么ajax发送的就必须是字符串。
如果没加会报错415,415报错参考链接
$.ajax({
url:"/stu/add"
,type:"POST"
,contentType: 'application/json'
,data:JSON.stringify(data.field)
,success:function (data) {
...
}
});
小结
【post】@RequestBody 传递一个对象
【post|get】@RequestParam和【常用于delete】@PathVariable都能够完成类似的功能——因为本质上,它们都是用户的输入,只不过输入的部分不同,一个在URL路径部分,另一个在参数部分。要访问一篇博客文章,这两种URL设计都是可以的:
- 通过@PathVariable,例如/blogs/1
- 通过@RequestParam,例如blogs?blogId=1
参考链接:
https://www.cnblogs.com/oldwei/p/10158685.html
@RequestParam、@PathVariable、 @RequestBody用法的更多相关文章
- Spring MVC常用注解@PathVariable、@RequestHeader、@CookieValue、@RequestParam、@RequestBody、@SessionAttributes、@ModelAttribute
简介: handler method参数绑定常用的注解,我们根据他们处理的Request的不同内容部分分为四类:(主要讲解常用类型) A.处理requet uri部分(这里指uri template中 ...
- [@Controller]3 详解@CookieValue,@PathVariable,@RequestBody,@RequestHeader,@RequestParam
[@Controller]3 详解@CookieValue,@PathVariable,@RequestBody,@RequestHeader,@RequestParam 转载:http://blog ...
- SpringMVC中通过@ResponseBody返回对象,Js中调用@ResponseBody返回值,统计剩余评论字数的js,@RequestParam默认值,@PathVariable的用法
1.SpringMVC中通过@ResponseBody.@RequestParam默认值,@PathVariable的用法 package com.kuman.cartoon.controller.f ...
- SpringBoot实战(四)获取接口请求中的参数(@PathVariable,@RequestParam,@RequestBody)
上一篇SpringBoot实战(二)Restful风格API接口中写了一个控制器,获取了前端请求的参数,现在我们就参数的获取与校验做一个介绍: 一:获取参数 SpringBoot提供的获取参数注解包括 ...
- msql中@RequestParam、@Param、@PathVariable的用法
@RequestParam的用法 1.可以对传入参数指定参数名,将请求参数绑定至方法参数 // 下面的对传入参数指定为aa,如果前端不传aa参数名,会报错 @RequestParam(value=&q ...
- @RequestParam、@RequestBody、@PathVariable区别和案例分析
一.前言 @RequestParam.@RequestBody.@PathVariable都是用于在Controller层接收前端传递的数据,他们之间的使用场景不太一样,今天来介绍一下!! 二.实体类 ...
- 灵活运用的@RequestParam和@RequestBody
最近在编写项目的过程中,老出现前后端传递参数格式不一致.不统一的问题,对于一个已经快工作一年的Java程序员来说,实属不合格,所以我就下来好好研究了一下@RequestParam和@RequestBo ...
- springMVC中 @RequestParam和@RequestBody的区别
首先,不可以同时传进@RequestParam和@RequestBody,好像可以传进两个@RequestParam 如果不加@requestparam修饰,相当于 加上@requestparam且各 ...
- springMVC中@RequestParam和@RequestBody的作用
@RequestParam和@RequestBody是什么区别,估计很多人还是不太清楚, 因为一般用@ RequestParam就足够传入参数了,要说他们区别,就需要知道contentType是什么? ...
- post传参params与body的区别(@RequestParam和@RequestBody的区别)
1.axios post请求 Content-Type默认为 application/x-www-form-urlencoded,我们传递参数的时,params里面的参数(简单的对象,通过 &quo ...
随机推荐
- key解析
密钥在不同实体之间传递,因此密钥必须可以序列化. 所有密钥三个特性: 算法:密钥使用的算法,如DES和DSA等,通过getAlgorithm()获取算法名 编码形式:密钥的外部编码形式,如X.509, ...
- 利用kali系统制作最简单的OS
制作最简单的OS 一.生成.bin文件 1.创建Boot.asm文件,输入相应的汇编代码 org 07c00h ; mov ax, cs mov ds, ax mov es, ax call Disp ...
- MyBatis(十一):MyBatis架构流程浅析
架构分层 我们将MyBatis架构分为三层,分别为接口层.数据处理层和框架支撑层 接口层:提供外部接口调用的API,使用端通过这些API来操作数据库,接口层收到请求后会调用数据处理层完成具体的数据处理 ...
- C++如何解析函数调用
C语言是一个简单的语言.用户针对每一个函数,只能设置一个唯一的函数签名.但是C++而言,就给了我们很多的灵活性: 你可以将多个函数设置为相同的名字(overloading) 你可以使用内置操作符重载( ...
- Line-line Intersection Gym - 102220C
题目链接:https://vjudge.net/problem/Gym-102220C 题意:求n 条直线两两相交有几对(也可以重合). 思路:用map和pair存所有直线的斜率和与X轴的交点,假设与 ...
- 模拟实现AMD模块化规范
目录 引子 再谈什么是闭包(闭包的产生)? 词法作用域 回到闭包 利用闭包编写模块 实现AMD模块化规范 写在最后 引子 本文最后的目的是模拟实现AMD模块化规范,而写下本文的原因是今天阅读到了< ...
- C# 调用HTTP接口两种方式
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net ...
- 前端知识-CS-01
一.选择器 通过什么方式来定位 1.sytle标签 style标签功能:写css样式的sytle标签的几种写法:1.可以在head里面添加一个style标签 2.在head标签中 通过link标签,引 ...
- IDEA中通过正则表达式批量替换空白行
快捷键Ctrl+r 填入^\s*\n,勾选Regex,Replace all
- 图像Resize方式对深度学习模型效果的影响
在基于卷积神经网络的应用过程中,图像Resize是必不可少的一个步骤.通常原始图像尺寸比较大,比如常见监控摄像机出来的是1080P高清或者720P准高清画面,而网络模型输入一般没有这么大,像Yolo系 ...