SpringMVC--JSON数据

1 解析后台传递过来的数据为JOSN
一般而言,Spring MVC 的 CONTROLLER 可以通过两种方式返回 JSON 数据给前端JSP页面
1.1
Maven:

<!-- JSON -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.46</version>
        </dependency>

SpringMVC的配置文件添加解析器:

<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>

后台:

@RequestMapping("/json")
    @ResponseBody
    public List<User> json(){
        List<User> list=new ArrayList<User>();
        list.add(new User(1,"zhangsan","男"));
        list.add(new User(2,"nico","女"));
        list.add(new User(3,"zhangsa","男"));
        return list;
    }

前台:

$.post("ajax.do",function(data){
                    for(var i=0;i,data.length;i++){
                        html+="<tr><td>"+data[i].id+"</td><td>"+data[i].name+"</td><td>"+data[i].sex+"</td></tr>"                       
                    }
                    $("#content").html(html);
                });

1.2 将数据转为JSON数组的形式,前台解析
后台控制器,定义一个JSON数组,向数组中添加对象。

@RequestMapping("josntext")
    public String text(HttpServletRequest request, HttpServletResponse response) {
        JSONArray array = new JSONArray();
        JSONObject object = null;
        for (int i = 0; i < 5; i++) {
            object = new JSONObject();
            object.accumulate("a", 1);
            object.accumulate("b", 2);
            object.accumulate("c", 3);
            object.accumulate("d", 4);
            array.add(object);
        }
        request.setAttribute("arr", array);
        return "josn";
    }

返回的页面:

<script>
    $(document).ready(function(){
        var arr='<%=request.getAttribute("arr")%>';
        alert(arr);
        arr=JSON.parse(arr);//解析成了一个类似二维数组的形式
        alert(arr[0].a);
    });
</script>

需要注意的是后台传递过来的数据为字符串的形式,需要转化为JSON数组。
出现的问题及解决方案:

报错:Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError:
commons/lang/exception/NestableRuntimeException] with root cause
抛了两个错误,从后一个中可知,是缺少JOSN相关的架包。
添加commons-lang.jar即可,必须保证有如下几个包:
commons-beanutils.jar commons-collections-3.1.jar commons-lang.jar commons-logging.jar
ezmorph-1.0.6.jar json-lib-2.2.2-jdk15.jar

2 对于某 Controller 而言,只有个别方法返回JSON数据的注解:在方法前增加注解 @ResponceBody即可

3 针对整个 Controller 而言,均返回 JSON 数据的注解:@RestController 代替 @Controller 。无需在方法中注明。

4 使用ObjectMapper将数据转为Json

List<Country> list=new ArrayList<Country>();
list=createCountryList();//获取数据
return(mapper.writeValueAsString(list));//转换
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值