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形式的数据。

@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用法的更多相关文章

  1. Spring MVC常用注解@PathVariable、@RequestHeader、@CookieValue、@RequestParam、@RequestBody、@SessionAttributes、@ModelAttribute

    简介: handler method参数绑定常用的注解,我们根据他们处理的Request的不同内容部分分为四类:(主要讲解常用类型) A.处理requet uri部分(这里指uri template中 ...

  2. [@Controller]3 详解@CookieValue,@PathVariable,@RequestBody,@RequestHeader,@RequestParam

    [@Controller]3 详解@CookieValue,@PathVariable,@RequestBody,@RequestHeader,@RequestParam 转载:http://blog ...

  3. SpringMVC中通过@ResponseBody返回对象,Js中调用@ResponseBody返回值,统计剩余评论字数的js,@RequestParam默认值,@PathVariable的用法

    1.SpringMVC中通过@ResponseBody.@RequestParam默认值,@PathVariable的用法 package com.kuman.cartoon.controller.f ...

  4. SpringBoot实战(四)获取接口请求中的参数(@PathVariable,@RequestParam,@RequestBody)

    上一篇SpringBoot实战(二)Restful风格API接口中写了一个控制器,获取了前端请求的参数,现在我们就参数的获取与校验做一个介绍: 一:获取参数 SpringBoot提供的获取参数注解包括 ...

  5. msql中@RequestParam、@Param、@PathVariable的用法

    @RequestParam的用法 1.可以对传入参数指定参数名,将请求参数绑定至方法参数 // 下面的对传入参数指定为aa,如果前端不传aa参数名,会报错 @RequestParam(value=&q ...

  6. @RequestParam、@RequestBody、@PathVariable区别和案例分析

    一.前言 @RequestParam.@RequestBody.@PathVariable都是用于在Controller层接收前端传递的数据,他们之间的使用场景不太一样,今天来介绍一下!! 二.实体类 ...

  7. 灵活运用的@RequestParam和@RequestBody

    最近在编写项目的过程中,老出现前后端传递参数格式不一致.不统一的问题,对于一个已经快工作一年的Java程序员来说,实属不合格,所以我就下来好好研究了一下@RequestParam和@RequestBo ...

  8. springMVC中 @RequestParam和@RequestBody的区别

    首先,不可以同时传进@RequestParam和@RequestBody,好像可以传进两个@RequestParam 如果不加@requestparam修饰,相当于 加上@requestparam且各 ...

  9. springMVC中@RequestParam和@RequestBody的作用

    @RequestParam和@RequestBody是什么区别,估计很多人还是不太清楚, 因为一般用@ RequestParam就足够传入参数了,要说他们区别,就需要知道contentType是什么? ...

  10. post传参params与body的区别(@RequestParam和@RequestBody的区别)

    1.axios post请求  Content-Type默认为 application/x-www-form-urlencoded,我们传递参数的时,params里面的参数(简单的对象,通过 &quo ...

随机推荐

  1. Java流程控制:增强for循环,break&continue,打印99乘法表

    增强for循环:java5引入了一种主要用于数组或集合的增强for循环for(声明语句:表达式){//代码句子} 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配.其作用域限定在循环语 ...

  2. vue 折线柱状图

    需求:折线柱状图实现,显示不同提示,颜色,标记等等. 图例: 实现: <template> <div class="transaction-barline"> ...

  3. [LOJ 572] Misaka Network 与求和

    一.题目 点此看题 二.解法 直接推柿子吧: \[\sum_{i=1}^n\sum_{j=1}^nf(\gcd(i,j))^k \] \[\sum_{d=1}^nf(d)^k\sum_{i=1}^{n ...

  4. Lzzy高级语言程序设计之while循环

    public class Mq2 { public static void main(String[]args) { int b = 3; while (b < 7) { System.out. ...

  5. 19. 一文搞懂 Go Modules 前世今生及入门使用

    Hi,大家好. 我是明哥,在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 <Go编程时光>,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适 ...

  6. 【LeetCode】2020-04 每日一题

    8. 字符串转换整数 (atoi)(中等) [分类]:模拟.正则表达式 [题解]: 解法1:直接模拟,但是在判断INT_MAX和INT_MIN上需要注意,因为直接判断会超出范围,所以可以将式子转换一下 ...

  7. Android Studio 之 通过 Intent 完成点击按钮实现页面跳转

    •Intent 简介 Intent 是 Android 程序中各组件之间进行交互的一种重要方式: 它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据. Intent 有多个构造函数,其 ...

  8. [状压DP]车II

    车 I I 车II 车II 题目描述 有一个 n ∗ m n*m n∗m的棋盘 ( n . m ≤ 80 , n ∗ m ≤ 80 ) (n.m≤80,n*m≤80) (n.m≤80,n∗m≤80)要 ...

  9. Linux常用命令-基础部分

    Linux介绍 Linux是一款开源的操作系统,免费,开源,安全,高效,处理高并发非常强悍,很多企业级开发项目都部署在Linux/UNIX上. 创始人:Linus Torvalds 林纳斯 Linux ...

  10. OO第四单元——基于UML的UML解析器总结&OO课程总结

    OO第四单元--基于UML的UML解析器总结&OO课程总结 前言:一学期愉快(痛苦)的OO课程学习结束了,OO几个单元作业都各有特色,实验也各有特色,仔细回味起来,不再是单纯的敲代码(但自己还 ...