项目内容用的是jetty框架,传输数据格式是json格式,有一天我心血来潮,把项目又搭建了一次,完了,卡在了数据传输的格式上,明明原来框架直接用fastjson,但是我用就是不对,总是报fastjson这个类无法加载。当时把依赖配置全部拆开了,一点一点的加,终于找到原因了,但是当时不懂。上周日在家用springmvc框架,也想用fastjson传输数据,问题来了。不过解决了,在此总结一下,希望给跟我遇到同样问题的人一个解答。

1、springmvc原来的注解@RequestBody 解析的请求数据是字符串类型,如果直接配置请求数据格式为com.alibaba.fastjson.JSONObject,那么会抛出下面的异常:

Controller [springMVCmybatis.modifyController]
Method [public java.lang.Object springMVCmybatis.modifyController.addEmpGetStu(com.alibaba.fastjson.JSONObject) throws java.lang.Exception]

这是因为@RequestBody解析请求的数据的时候会用StringHttpMessageConverter类,将http请求的body解析成String类型。如果想用JSON来接收数据,那么就要配置httpMessageConverter类,所以也可以自己定义解析的方式。下面就是在applicationContext.xml文件中的配置。

2、在applicationContext.xml文件中配置如下代码,这样就可以用FastJson来解析数据了。

<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json</value>
<value>application/xml;charset=UTF-8</value>
</list>
</property>
<property name="features">
<list>
<!-- 默认的意思就是不配置这个属性,配置了就不是默认了 -->
<!-- 是否输出值为null的字段 ,默认是false--> <value>WriteMapNullValue</value> <value>WriteNullNumberAsZero</value>
<value>WriteNullListAsEmpty</value>
<value>WriteNullStringAsEmpty</value>
<value>WriteNullBooleanAsFalse</value>
<value>WriteDateUseDateFormat</value> </list>
</property>
</bean> </mvc:message-converters>
</mvc:annotation-driven>

3、fastJson可以将传输过来的数据直接转换成对象,这一点比较好,省去了中间转换的麻烦,这里我就举一个Student的例子。

postMan请求的数据json数据格式如下:

{
"id" : null,
"name": "张三",
"clas":"2",
"interest" : "" }

服务器的代码如下:

@RequestMapping(value = {"/modifyStu.do"},method={RequestMethod.POST}, 	consumes={"application/json"},
produces={"application/json"})
@ResponseBody
public Object addEmpGetStu(@RequestBody Student student)throws Exception { JSONObject responseObj = (JSONObject)JSONObject.toJSON(student); return responseObj ;

postMan接收到的数据如下,可以看见id输入的是null,但是返回的是0,就是因为配置中将整数输入为null,转换成0

{
"clas": "2",
"interest": "",
"name": "张三",
"id": 0
}

【参考博客】

1、https://my.oschina.net/yehun/blog/872218

2、http://blog.csdn.net/qq_21989939/article/details/46739567 

 

  

springmvc与fastjson的整合,注解@RequestBody的使用的更多相关文章

  1. SpringMVC中post请求参数注解@requestBody使用问题

    一.httpClient发送Post 原文https://www.cnblogs.com/Vdiao/p/5339487.html public static String httpPostWithJ ...

  2. SpringMVC的controller方法中注解方式传List参数使用@RequestBody

    在SpringMVC控制器方法中使用注解方式传List类型的参数时,要使用@RequestBody注解而不是@RequestParam注解: //创建文件夹 @RequestMapping(value ...

  3. 1.springMVC+spring+Mybatis的整合思路

    SSM整合的过程:就是把一些东西交给spring管理,也就是添加配置文件的一个过程.那么有哪些东西我们要交给spring管理呢?大概有以下几个: 1.数据源(可配置数据库连接池) 2.SqlSessi ...

  4. SSM框架整合的详细过程(含每一步的分析及代码)。实质上是SpringMVC与mybatis的整合,应为spring与SpringMVC不需要整合。

    为了更好的学习 springmvc和mybatis整合开发的方法,需要将springmvc和mybatis进行整合. 整合目标:控制层采用springmvc.持久层使用mybatis实现. 1.1 需 ...

  5. Spring+SpringMVC+MyBatis+Maven框架整合

    本文记录了Spring+SpringMVC+MyBatis+Maven框架整合的记录,主要记录以下几点 一.Maven需要引入的jar包 二.Spring与SpringMVC的配置分离 三.Sprin ...

  6. SSM框架之SpringMVC(3)常用注解

    SpringMVC(3)常用注解 1. RequestParam注解 1.作用:把请求中指定名称的参数传递给控制器中的形参赋值 2.属性: ​ 1.value:请求参数的每次 ​ 2.required ...

  7. JavaWeb_(SpringMVC框架)测试SpringMVC&Spring&MyBatis三大整合

    搭建 SpringMVC&Spring&MyBatis三大整合 传送门 1.准备 测试搭建S pringMVC&Spring&MyBatis三大整合 用例   a)准备 ...

  8. idea spring+springmvc+mybatis环境配置整合详解

    idea spring+springmvc+mybatis环境配置整合详解 1.配置整合前所需准备的环境: 1.1:jdk1.8 1.2:idea2017.1.5 1.3:Maven 3.5.2 2. ...

  9. 注解@requestBody自动封装复杂对象 (成功,自己的例子封装的不是一个复杂对象,只是一个简单的User对象,将jsp页面的name转成json字符串,再用JSON.stringify()传参就行了)

    注意:ajax向后台传值的时候,必须加上contentType:"application/json"; springmvc的注解@requestBody可以通过页面提交json来自 ...

随机推荐

  1. ansible自动化运维详细教程及playbook详解

    前言 当下有许多的运维自动化工具( 配置管理 ),例如:Ansible.SaltStack.Puppet.Fabric 等. Ansible 一种集成 IT 系统的配置管理.应用部署.执行特定任务的开 ...

  2. easyui改变tab标题

    截图:   代码: //更改tab的标题 var tab = $('#microAppVersionTabs').tabs('getTab',0);// 取得第一个tab $('#microAppVe ...

  3. mysql修改删除You can't specify target table for update in FROM clause的问题

    表中出现重复数据,需要删除重复数据,只保留一条 DELETE FROM crm_participant WHERE id IN ( SELECT c.id cid FROM crm_participa ...

  4. 天天向上的力量 III

    描述 一年365天,以第1天的能力值为基数,记为1.0. 当好好学习时,能力值相比前一天提高N‰:当没有学习时,能力值相比前一天下降N‰. 每天努力或放任,一年下来的能力值相差多少呢?其中,N的取值范 ...

  5. ES6 的面向对象

    JavaScript 语言中,生成实例对象的传统方法是通过构造函数. function Animal(name, age) { this.name = name; this.age = age; } ...

  6. node.js中使用socket.io + express进行实时消息推送

    socket.io是一个websocket库,包含客户端的js和服务端的node.js,可以在不同浏览器和移动设备上构建实时应用. 一.安装 socket.io npm install socket. ...

  7. Scanner 随机数

    import java.util.Scanner;                                               import java.util.Scanner; Sc ...

  8. 【转】背后的故事之 - 快乐的Lambda表达式(一)

    快乐的Lambda表达式(二) 自从Lambda随.NET Framework3.5出现在.NET开发者眼前以来,它已经给我们带来了太多的欣喜.它优雅,对开发者更友好,能提高开发效率,天啊!它还有可能 ...

  9. AOP打印请求日志,打印返回值

    @Aspect // 申明是个spring管理的bean @Component @Slf4j public class LogAspectServiceApi { private JSONObject ...

  10. 第39章:MongoDB-集群--Replica Sets(副本集)---副本集基本原理

    ①操作日志oplog Oplog是主节点的local数据库中的一个固定集合,按顺序记录了主节点的每一次写操作,MongoDB的复制功能是使用oplog来实现的,备份节点通过查询这个集合就可以知道需要进 ...