二.十 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 . 运行服务器,进行测试。
控制台打印输出
前端数据展示
响应数据类型返回
二.十一 返回集合类型 如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与fastjson 进行整合
三.一 添加fastjson 的jar包。
注意,在添加fastjson jar包之前,一定要去除掉以前的jackson 的jar包,不然还是会默认加载的。这一点是非常重要的。
三.二 修改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对象了。
三.五 重启服务器,进行验证。
在这里插入图片描述
当然,也可以返回单个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; }
前端的话,与 二.八 章节的前端的值一致。 这里不再重复写。
谢谢!!!