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

最新文章

  1. zabbix的使用
  2. js中自定义事件,使用了jQuery
  3. DPDK多核多线程机制简析
  4. 《Python CookBook2》 第一章 文本 - 每次处理一个字符 &amp;&amp; 字符和字符值之间的转换
  5. SE 2014年5月6日
  6. hdu 新生晚会
  7. [RM 状态机详解3]RMContainer状态机详解
  8. 微信小程序开发系列(一)小程序开发初体验
  9. 1833: [ZJOI2010]count 数字计数
  10. 201521123013 《Java程序设计》第14周学习总结
  11. 用javascript做别踩白块游戏2
  12. 一个多阶段库存订货问题的 +Leapms 求解要点
  13. react native( rn) 中关于navigationOptions中headerRight 获取navigation的问题 rn
  14. MySQL下载、安装和登录详解
  15. 测试工具使用-Qunit单元测试使用过程
  16. position fixed 相对于父级定位
  17. 20165237 2017-2018-2 《Java程序设计》第1周学习总结
  18. [读书笔记]SQLSERVER企业级平台管理实践读书笔记02
  19. mac console color setting
  20. POJ - 题解sol[暂停更新]

热门文章

  1. win8 下删除服务
  2. python-给一个参数n,例如3:先输出1,2,3,4,5,6,7,8,9,每三个数后换行,后输出1,4,7,2,5,8,3,6,9
  3. 如何提高Web应用系统的性能?
  4. 9、MyBatis教程之多对一处理
  5. 使用oracle序列+oracle定时任务获取每月从1开始的流水码
  6. 使用 Kubernetes 扩展专用游戏服务器
  7. Java 学习记录
  8. 力扣 - 剑指 Offer 37. 序列化二叉树
  9. java进阶(41)--反射机制
  10. Redis解读(1):Redis安装启动及常见数据类型