Spring 注解之@RequestBody和@PostMapping
@RequestBody的使用
注解@RequestBody用于接收前端传递给后端的、JSON对象的字符串,这些数据位于请求体中,适合处理的数据为非Content-Type: application/x-www-form-urlencoded编码格式的数据,比如:application/json、application/xml等类型的数据。就application/json类型的数据而言,使用注解@RequestBody可以将body里面所有的JSON字符串绑定到后端相应的Java Bean上,后端再进行数据解析和业务操作。需要格外注意的是,JSON字符串中的key必须对应Java Bean中的属性名;否则,无法接收到相关key的值。
GET请求中,因为没有请求体,所以@RequestBody并不适用。POST请求中,必须要在请求头中声明数据的类型Content-Type。Spring MVC通过使用系统默认配置的HttpMessageConverters解析请求体中的数据,然后把数据绑定到相应的Java Bean上。
温馨提示:一个请求,只可以使用一个@RequestBody注解,却可以使用多个@RequestParam注解。
@RestController
@RequestMapping("/user")
public class UserController {
@PostMapping("/testRequestBody")
public User testRequestBody(@RequestBody User user){
return user;
}
/**
* 同时使用 @RequestBody 与 @RequestParam()
* http://localhost:8087/wiener/user/testRequestBody?token=IamToken
* @param user
* @param token
* @return
* @throws Exception
*/
@PostMapping("/testRequestBodyAndParam")
public User testRequestBodyAndParam(@RequestBody User user, @RequestParam("token") String token) throws Exception {
user.setRemark(token);
return user;
}
}
其中,Java Bean User定义如下:
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.stereotype.Component;
import java.io.Serializable;
/**
* @author Wiener
*/
@Setter
@Getter
@ToString
@Component
public class User implements Serializable {
private static final long serialVersionUID = 4268287310462519889L;
private Long id;
private int age;
private String name;
private String remark;
public User() {
}
public User(Long id, int age, String name) {
super();
this.id = id;
this.age = age;
this.name = name;
}
}
启动项目,使用Postman模拟前端HTTP请求,测试结果如下,说明两个注解可以同时使用。

Spring 注解之@PostMapping
@PostMapping是一个组合注解,在Spring framework 4.3作为@RequestMapping(method = RequestMethod.POST)的变体引入,它将HTTP Post请求映射到特定的处理方法上。例如,使用@PosttMapping("/testRequestBody")就等价于@RequestMapping(value ="/testRequestBody",method = RequestMethod.POST),显然,这可以精简我们的代码。
小结
在GET请求中,不能使用@RequestBody。在POST请求,可以使用@RequestBody和@RequestParam,但是如果使用@RequestBody,对于参数转化的约定,前后端必须统一。
Spring 注解之@RequestBody和@PostMapping的更多相关文章
- 转-Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable
转-http://snowolf.iteye.com/blog/1628861/ Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariab ...
- Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable (转)
最近需要做些接口服务,服务协议定为JSON,为了整合在Spring中,一开始确实费了很大的劲,经朋友提醒才发现,SpringMVC已经强悍到如此地步,佩服! 相关参考: Spring 注解学习手札(一 ...
- Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable(转)
最近需要做些接口服务,服务协议定为JSON,为了整合在Spring中,一开始确实费了很大的劲,经朋友提醒才发现,SpringMVC已经强悍到如此地步,佩服! 相关参考: Spring 注解学习手札(一 ...
- spring注解式参数校验
很痛苦遇到大量的参数进行校验,在业务中还要抛出异常或者返回异常时的校验信息,在代码中相当冗长,今天我们就来学习spring注解式参数校验. 其实就是:hibernate的validator. 开始啦. ...
- 每个Java开发人员都应该知道的4个Spring注解
这是每个Java开发人员都应该知道的最重要的Spring注解.感谢优锐课老师对本文提供的一些帮助. 随着越来越多的功能被打包到单个应用程序或一组应用程序中,现代应用程序的复杂性从未停止增长.尽管这种增 ...
- 【转】Spring 注解学习手札(超好的springmvc注解教程)
Spring 注解学习手札(一) 构建简单Web应用 Spring 注解学习手札(二) 控制层梳理 Spring 注解学习手札(三) 表单页面处理 Spring 注解学习手札(四) 持久层浅析 Spr ...
- spring注解开发中常用注解以及简单配置
一.spring注解开发中常用注解以及简单配置 1.为什么要用注解开发:spring的核心是Ioc容器和Aop,对于传统的Ioc编程来说我们需要在spring的配置文件中邪大量的bean来向sprin ...
- spring注解关键字
spring注解: (1)@Controller 控制器 (2)@Autowired 按照类型匹配,可以完成对类成员变量,方法及构造函数进行标注,完成自动装配的工作 @Autowired ...
- 跟Evan学Sprign编程思想 | Spring注解编程模式【译】
Spring注解编程模式 概况 多年来,Spring Framework不断发展对注解.元注解和组合注解的支持. 本文档旨在帮助开发人员(Spring的最终用户以及Spring Framework和S ...
- spring注解源码分析--how does autowired works?
1. 背景 注解可以减少代码的开发量,spring提供了丰富的注解功能.我们可能会被问到,spring的注解到底是什么触发的呢?今天以spring最常使用的一个注解autowired来跟踪代码,进行d ...
随机推荐
- C# 之事件及event关键字存在的意义
总结:event关键字的作用,用于不公开发布器中委托对象实例,对事件委托对象进行保护,禁止外部调用. 1.C#事件举例说明 1 //事件及event关键字存在的意义 2 class Program 3 ...
- Navicat 如何将表恢复默认状态下
场景: 测试一套流程后,造测试数据非常麻烦的情况下,如何通过更改数据库为默认情况即初始表数据 案例: 比如表原有结构如下图(一) 修改后数据如下图(二): 需求:将图二数据恢复到图一内容下 操作思想: ...
- 如何调用CMD实现多个同类文件合并的研究 · 二进制 · 依次 · 文本图像视频音频
引言 视频网站内,使用视频下载嗅探器下载了视频,打开资源管理器一看,是几千个.ts文件,见下图: 通过播放部分视频,发现其实内容是完整的,只是自动切割了多份,倘若无缝拼接为一个完整视频单元,就可以 ...
- 基础命令:dd、tar、ln、find、逻辑符号、alisa别名、md5sun校验、lrzsz文件上传下载、wget
目录 3.0 dd读取.转换并输出数据 3.1 压缩 (tar.zip).解压缩(tar xf.unzip) 3.2 ln软硬链接 3.2.1 软链接: 3.2.2 硬链接: 3.3 find文件查找 ...
- Javascript try catch finally
很少用到javascript的异常捕获,突然需要,发现挺全的,小小记录下,留爪. 直接打码: //public.js //异常输出 function exception(ex) { console.l ...
- 《机器人SLAM导航核心技术与实战》第1季:第9章_视觉SLAM系统
<机器人SLAM导航核心技术与实战>第1季:第9章_视觉SLAM系统 视频讲解 [第1季]9.第9章_视觉SLAM系统-视频讲解 [第1季]9.1.第9章_视觉SLAM系统_ORB-SLA ...
- 离线版nrfutil工具安装方法
简介 nrfutil是Nordic提供的命令行工具集.支持以下功能: 基于Jlink的固件烧录.读取.flash擦除.recover 基于MCUBOOT的固件升级(DFU) 基于nRF5 bootlo ...
- fdMemtable FDQuery json之间的一些关系
1 procedure TForm1.btn1Click(Sender: TObject); 2 var ss,ss1: TStringStream; 3 begin 4 ss := TStringS ...
- Asp.net mvc基础(十)判断是否是ajax请求
通过Request.IsAjaxRequest()方法进行判断是否是ajax的请求,true是ajax的请求,false不是ajax的请求 后端: 前端: 效果: 使用Request.IsAjaxRe ...
- spring-boot静态资源目录配置
spring-boot静态资源目录配置(配置js.css.图片等资源的位置) spring-boot静态资源默认为/src/main/resources下的/static目录,可以通过applicat ...