一、说明

首先@RequestBody需要接的参数是一个string化的json,这里直接使用JSON.stringify(json)这个方法来转化

其次@RequestBody,从名称上来看也就是说要读取的数据在请求体里,所以要发post请求

第三,要设置contentType,contentType:"application/json,明确的告诉服务器发送的内容是json,而默认的contentType是application/x-www-form-urlencoded; charset=UTF-8

(前台传输json字符串,后台通过@RequestBody接受,直接映射到实体对象中,无需将json字符串转为json对象,再将值赋值到对象中。

二、参考代码

那么可以开始写出代码了:

$.ajax({
type: "post",
contentType:"application/json",
url: "repairs/saveDispatches",
data: JSON.stringify(dispatchesDTO),
success: function(data){
if(!data.success){
alertError("派工失败");
}else{
alertSuccess("派工成功");
}
})

后台怎么接呢?这就轮到@RequestBody出马了

@RequestMapping("/repairs/saveDispatches")
public void saveDispatches(@RequestBody DispatchesDTO dispatchesDTO,
HttpServletResponse response) throws IOException { dispatchesService.saveDispatches(dispatchesDTO);
success(response);
}

很简单吧,无需手动进行json与实体的转换,只要能映射上去(也就是字段名和json的key相对应,value可以匹配上数据类型),那么就可以直接转换。

如何定义“能映射上去”呢?若是json中的key在实体中都能找到对应的field,那么就是“能映射上去”,也就是说:

前台传入的json中的key在实体中必须要存在,不然就会报错,比如下面这个前台传入的json中多了一个key为id的键值对

org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Unrecognized field "id" (Class com.westsoft.kft.repairs.dto.DispatchesDTO), not marked as ignorable

三、配置

其实要使用@RequestBody这个注解还需要额外配置一个Bean,也就是自动帮我们接收json并转成对象的消息转换器messageConverter

由于我使用的是Spring3.1之后的版本,那么配置在RequestMappingHandlerAdapter下

<!--Spring3.1开始的注解 HandlerAdapter -->
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
</bean>
</list>
</property>
</bean>

当然也可以通过<mvc:annotation-driven />来简单的配置,这里就不过多介绍了~

四、后言

最后再要提到几点

一、若1、前台发送请求时未指定contentType为json/application 2、spring中未配置messageConverter

那么会报错误415,也就是类型不支持

前者是因为Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported

而后者是因为Content type 'application/json;charset=UTF-8' not supported

二、由于Spring中使用的json转换用到的是jackson,所以需要引入jackson包

原文出处:

[1] 多弗朗明哥, 【Java】关于@RequestBody, https://www.cnblogs.com/dflmg/p/6364141.html

@RequestBody的使用的更多相关文章

  1. Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解

    (转自:http://blog.csdn.net/walkerjong/article/details/7946109#) 引言: 接上一篇文章,对@RequestMapping进行地址映射讲解之后, ...

  2. @RequestParam @RequestBody @PathVariable 等参数绑定注解详解

    文章主要讲解request 数据到handler method 参数数据的绑定所用到的注解和什么情形下使用. 简介: handler method 参数绑定常用的注解,我们根据他们处理的Request ...

  3. 《转载》Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解

    引言: 接上一篇文章,对@RequestMapping进行地址映射讲解之后,该篇主要讲解request 数据到handler method 参数数据的绑定所用到的注解和什么情形下使用: 简介: han ...

  4. 《转载》Spring MVC之@RequestBody, @ResponseBody 详解

    引言: 接上一篇文章讲述处理@RequestMapping的方法参数绑定之后,详细介绍下@RequestBody.@ResponseBody的具体用法和使用时机: 简介: @RequestBody 作 ...

  5. 令人崩溃的@requestBody乱码一例

    这个问题真是让我心力憔悴了...在客户现场对接就是乱码,StringHttpConverter怎么配置都不行... 场景其实很简单:客户那头post一个http请求,包体是json字符串,我这头spr ...

  6. SpringMVC @RequestBody接收Json对象字符串

    其实 @RequestBody接收的是一个Json对象的字符串,而不是一个Json对象.然而在ajax请求往往传的都是Json对象,后来发现用 JSON.stringify(data)的方式就能将对象 ...

  7. SpringMVC@RequestBody小细节

    关于@RequestBody  参数类型自己的包装类,还是类似String/int,区别: 1.@RequestBody LoginParmar parmar String user_number = ...

  8. @RequestBody接收ajax的json字符串

    在使用ajax进行请求,并传递参数时,偶尔需要把数组作为传递参数,这是就要使用@RequestBody来解决这个问题 在页面端的处理: (1)利用JSON.stringify(arr)需要把json对 ...

  9. Spring @RequestParam @RequestBody @PathVariable 等参数绑定注解详解

    背景 昨天一个人瞎倒腾spring boot,然后遇到了一点问题,所以把这个问题总结一下. 主要讲解request 数据到handler method 参数数据的绑定,所用到的注解和什么情形下使用. ...

  10. SpringMVC使用@PathVariable,@RequestBody,@ResponseBody,@RequestParam,@InitBinder

    @Pathvariable public ResponseEntity<String> ordersBack(           @PathVariable String reqKey, ...

随机推荐

  1. 【Java深入研究】11、深入研究hashmap中的hash算法

    一.简介 大家都知道,HashMap中定位到桶的位置 是根据Key的hash值与数组的长度取模来计算的. JDK8中的hash 算法: static final int hash(Object key ...

  2. 为什么会有jQuery、Dojo、Ext、Prototype、YUI、Zepto这么多JS包?

    目前流行的JS框架很多Dojo .Scriptaculous .Prototype .yui-ext .Jquery .Mochikit.mootools .moo.fx 等.当然还有很多我都不熟悉的 ...

  3. Ubuntu下的log日志查看器

    1.lnav:Linux 下一个基于控制台的高级日志文件查看器 https://www.cnblogs.com/michealLang/p/9761886.html http://www.imooc. ...

  4. 网站 & APP 安利

    https://sitoi.cn/posts/51270.html APP 影视类 影视大院 地址:https://www.vfans.fun 描述:没有上架应用商店,需要安装信任企业证书,VIP资源 ...

  5. Linux之ubuntu下载

    (转载) ubuntu 16.04国内下载地址: 中科大源 http://mirrors.ustc.edu.cn/ubuntu-releases/16.04/ 阿里云开源镜像站 http://mirr ...

  6. (十二)Kubernetes 认证、授权与准入控制

    访问控制概述 API Server作为Kubernetes集群系统的网关,是访问和管理资源对象的唯一入口:包括kube-controller-manager.kube-scheduler.kubele ...

  7. Mac Docker安装Redis4.0

    mkdir redis 在~目录下创建redis目录 docker run -d -p 6379:6379 -v $PWD/redis:/data -d --name redis4.0 redis:4 ...

  8. httprunner学习20-跳过用例skip/skipIf/skipUnless

    前言 在实际工作中,我们有时候会需要对测试用例加判断,比如某个接口功能暂时去掉了,我们希望对这个用例skip不去执行. 当其它的接口依赖于登陆接口返回的token时候,如果登陆都失败了,后面的接口,我 ...

  9. 项目Beta冲刺 用户试用报告

    课程: 软件工程1916|W(福州大学) 作业要求: 项目Beta冲刺 团队名称: 火鸡堂 作业目标: 火鸡堂 队员学号 队员姓名 博客地址 备注 221600111 彼术向 http://www.c ...

  10. 项目Alpha冲刺(团队) -- 总结及汇总

    项目Alpha冲刺(团队) --总结 1.团队信息 团队名 :男上加男 成员信息 : 队员学号 队员姓名 个人博客地址 备注 221600427 Alicesft https://www.cnblog ...