SpringMVC的JSON处理及FastJSON的整合使用(七)下

二.十 JSON 的key/value 形式传入。


1 . 在后端的时候,不用@RequestBody 注解了,只需要用@ResponseBody 注解即可。



@RequestMapping(value="toLogin")
    public String toLogin(){
        return "user/login2";
}
@RequestMapping(value="/keyJson")
    public @ResponseBody User getKeyUser(User user){
        System.out.println("前台传过来的值是:"+user.toString());
        user.setName("我是老蝴蝶Key"); //改变前台传过来的值
        user.setId(1); //添加新的属性值
        return user;
    }



2 .前台页面


<body>
    <h2>两个蝴蝶飞欢迎你</h2>
    <span id="name"></span> <br>
    <span id="sex"></span> <br>
    <span id="description"></span> <br>
    <span id="id"></span> <br>
    <button onclick="execKeyValueJSON()">执行keyValueJson</button>
    <script type="text/javascript">
        function execKeyValueJSON(){
            //注意,这个时候传入的是字符串。
            var user="name='两个蝴蝶飞KeyValue'&sex=24&description='一个快乐的程序员keyValue'";
            //2。 执行ajax程序 
            $.ajax({
                type:"post", 
                url:"keyJson.action",  //注意请求路径
                data:user,
                success:function(data){
                    $("#name").html(data.name);
                    $("#sex").html(data.sex);
                    $("#description").html(data.description);
                    $("#id").html(data.id);
                }
            })
        }
    </script>
</body>


3 . 运行服务器,进行测试。


SpringMVC的JSON处理及FastJSON的整合使用(七)下

控制台打印输出


SpringMVC的JSON处理及FastJSON的整合使用(七)下


前端数据展示


SpringMVC的JSON处理及FastJSON的整合使用(七)下


响应数据类型返回


SpringMVC的JSON处理及FastJSON的整合使用(七)下


二.十一 返回集合类型 如List


采用 key/value 的形式进行讲解。


1 . 后端数据 返回



@RequestMapping(value="toLogin")
    public String toLogin(){
        return "user/login2";
}


@RequestMapping(value="/listJson")
    public @ResponseBody List<User> getUserList(User user){
        List<User> userList=new ArrayList<User>();
        User user0=new User();
        user0.setName("两个蝴蝶飞");
        user0.setDescription("一个快乐的程序员");
        userList.add(user0);
        
        User user1=new User();
        user1.setName("精灵妹");
        user1.setDescription("一个快乐的精灵");
        userList.add(user1);
        
        User user2=new User();
        user2.setName("老蝴蝶");
        user2.setDescription("一个快乐的老蝴蝶");
        userList.add(user2);
        
        User user3=new User();
        user3.setName("精小妹");
        user3.setDescription("一个快乐的精小妹");
        userList.add(user3);
        
        return userList;
        
    }


2 . 前端页面展示


<body>
    <h2>两个蝴蝶飞欢迎你</h2>
    <div id="listJson">
    
    </div>
    <button onclick="execListJSON()">执行listJson</button>
    <script type="text/javascript">
        function execListJSON(){
            //1。定义对象
            var user="name='两个蝴蝶飞KeyValue'&sex=24&description='一个快乐的程序员keyValue'";
            //2。 执行ajax程序 
            $.ajax({
                type:"post", 
                url:"listJson.action",  //注意请求路径
                data:user,
                success:function(data){
                    var str="<table><tr><th>姓名</th><th>描述</th></tr>";
                    $.each(data,function(idx,item){
                        str+="<tr>";
                        str+="<td>"+item.name+"</td>";
                        str+="<td>"+item.description+"</td>";
                        str+="</tr>";
                    })
                    str+="</table>";
                    $("#listJson").append(str);
                }
            })
        }
    </script>
</body>


3 . 运行服务器


SpringMVC的JSON处理及FastJSON的整合使用(七)下


前端数据展示为:


SpringMVC的JSON处理及FastJSON的整合使用(七)下


响应数据类型


SpringMVC的JSON处理及FastJSON的整合使用(七)下


响应数据:


SpringMVC的JSON处理及FastJSON的整合使用(七)下


三. SpringMVC与fastjson 进行整合


三.一 添加fastjson 的jar包。


注意,在添加fastjson jar包之前,一定要去除掉以前的jackson 的jar包,不然还是会默认加载的。这一点是非常重要的。


SpringMVC的JSON处理及FastJSON的整合使用(七)下


三.二 修改json 方式为fastjson


<!-- 设置fastjson的配置方案 -->
    <mvc:annotation-driven>
        <!-- 设置不使用默认的消息转换器 -->
        <mvc:message-converters register-defaults="false">
            <!-- 配置Spring的转换器 -->
            <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
            <bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter"/>
            <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
            <bean class="org.springframework.http.converter.BufferedImageHttpMessageConverter"/>
            <!-- 配置fastjson中实现HttpMessageConverter接口的转换器 -->
            <bean id="fastJsonHttpMessageConverter" 
                class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                <!-- 加入支持的媒体类型:返回contentType -->
                <property name="supportedMediaTypes">
                    <list>
                        <!-- 这里顺序不能反,一定先写text/html,不然ie下会出现下载提示 -->
                       <value>text/html;charset=UTF-8</value>
                        <value>application/json;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>


三.三 后端处理


@RequestMapping(value="/listJson",produces={"application/json"})
    public @ResponseBody List<User> getUserList(User user){
        List<User> userList=new ArrayList<User>();
        User user0=new User();
        user0.setName("两个蝴蝶飞");
        user0.setDescription("一个快乐的程序员");
        userList.add(user0);
        
        User user1=new User();
        user1.setName("精灵妹");
        user1.setDescription("一个快乐的精灵");
        userList.add(user1);
        
        User user2=new User();
        user2.setName("老蝴蝶");
        user2.setDescription("一个快乐的老蝴蝶");
        userList.add(user2);
        
        User user3=new User();
        user3.setName("精小妹");
        user3.setDescription("一个快乐的精小妹");
        userList.add(user3);
        
        return userList;
        
    }


注意,此时一定不要忘记用 produces 的属性,否则会按照 springmvc.xml 中的supportedMediaTypes 第一个属性值即text/html 进行解析。


三.四 前端页面显示


与 二.十一 的前端显示是一样的,回过来的数据就是 json对象了。


三.五 重启服务器,进行验证。


SpringMVC的JSON处理及FastJSON的整合使用(七)下


在这里插入图片描述


当然,也可以返回单个bean 对象值。 也需要写 produces 的属性值。


@RequestMapping(value="/responseJson",produces={"application/json"})
    public @ResponseBody User getResponseUser(@RequestBody User user){
        System.out.println("前台传过来的值是:"+user.toString());
        user.setName("我是老蝴蝶"); //改变前台传过来的值
        user.setId(1); //添加新的属性值
        return user;
    }


前端的话,与 二.八 章节的前端的值一致。 这里不再重复写。


谢谢!!!

上一篇:二分查找法的实现和应用汇总


下一篇:Flash/Flex学习笔记(6):制作基于xml数据源的flv视频播放器