zoukankan      html  css  js  c++  java
  • springmvc与fastjson的整合,注解@RequestBody的使用

      项目内容用的是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 

     

      

  • 相关阅读:
    Educational Codeforces Round 86 (Rated for Div. 2) D. Multiple Testcases
    Educational Codeforces Round 86 (Rated for Div. 2) C. Yet Another Counting Problem
    HDU
    HDU
    HDU
    HDU
    Good Bye 2019 C. Make Good (异或的使用)
    Educational Codeforces Round 78 (Rated for Div. 2) C. Berry Jam
    codeforces 909C. Python Indentation
    codeforces1054 C. Candies Distribution
  • 原文地址:https://www.cnblogs.com/boywwj/p/7441642.html
Copyright © 2011-2022 走看看