自定义HttpMessageConverter接受JSON格式的数据

本文介绍如何使用Spring MVC框架进行JSON数据的交互处理,包括配置FastJson作为HTTP消息转换器,前端通过AJAX发送JSON数据,后端控制器接收并响应JSON格式数据。

 1.配置修改

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns:mvc="http://www.springframework.org/schema/mvc"  
  5.     xmlns:util="http://www.springframework.org/schema/util"  
  6.     xmlns:context="http://www.springframework.org/schema/context"  
  7.     xsi:schemaLocation="  
  8.         http://www.springframework.org/schema/beans  
  9.         http://www.springframework.org/schema/beans/spring-beans-4.2.xsd  
  10.         http://www.springframework.org/schema/mvc  
  11.         http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd       
  12.         http://www.springframework.org/schema/context  
  13.         http://www.springframework.org/schema/context/spring-context-4.2.xsd  
  14.         http://www.springframework.org/schema/util  
  15.         http://www.springframework.org/schema/util/spring-util-4.2.xsd">  
  16.           
  17.     <!-- spring可以自动去扫描base-pack下面的包或者子包下面的java文件,  
  18.         如果扫描到有Spring的相关注解的类,则把这些类注册为Spring的bean -->  
  19.     <context:component-scan base-package="com.control"/>  
  20.     <!-- 使用默认的Servlet来响应静态文件 -->  
  21.     <mvc:default-servlet-handler/>  
  22.     <!-- 设置配置方案 -->  
  23.     <mvc:annotation-driven>  
  24.         <!-- 设置不使用默认的消息转换器 -->  
  25.         <mvc:message-converters register-defaults="false">  
  26.             <!-- 配置Spring的转换器 -->  
  27.             <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>  
  28.             <bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter"/>  
  29.             <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>  
  30.             <bean class="org.springframework.http.converter.BufferedImageHttpMessageConverter"/>  
  31.             <!-- 配置fastjson中实现HttpMessageConverter接口的转换器 -->  
  32.             <bean id="fastJsonHttpMessageConverter"  class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">  
  33.                 <!-- 加入支持的媒体类型:返回contentType -->  
  34.                 <property name="supportedMediaTypes">  
  35.                     <list>  
  36.                         <!-- 这里顺序不能反,一定先写text/html,不然ie下会出现下载提示 -->  
  37.                         <value>text/html;charset=UTF-8</value>  
  38.                         <value>application/json;charset=UTF-8</value>  
  39.                     </list>  
  40.                 </property>  
  41.             </bean>  
  42.         </mvc:message-converters>  
  43.     </mvc:annotation-driven>  
  44.       
  45.     <!-- 视图解析器  -->  
  46.      <bean id="viewResolver"  
  47.           class="org.springframework.web.servlet.view.InternalResourceViewResolver">   
  48.         <!-- 前缀 -->  
  49.         <property name="prefix">  
  50.             <value>/WEB-INF/content/</value>  
  51.         </property>  
  52.         <!-- 后缀 -->  
  53.         <property name="suffix">  
  54.             <value>.jsp</value>  
  55.         </property>  
  56.     </bean>  
  57. </beans>  

 注:以上的配置文件和和之前的配置文件重点的区别在于,之前使用的是spring中默认的Mapping-Jackson2HttpMessageConverter,这样只需要配置默认的<mvc:annotation-driven/>就可以了。而现在使用了第三方的fastjson处理json数据,则需要另行配置HttpMessageConverter。

2.前端

 index.jsp

[html]  view plain  copy
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <!DOCTYPE html>  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  7. <title>测试接收JSON格式的数据</title>  
  8. <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>  
  9. <script type="text/javascript" src="js/json2.js"></script>  
  10. <script type="text/javascript">  
  11. $(document).ready(function(){  
  12.     testRequestBody();  
  13. });  
  14. function testRequestBody(){  
  15.     $.ajax("${pageContext.request.contextPath}/json/testRequestBody",// 发送请求的URL字符串。  
  16.             {  
  17.            dataType : "json", // 预期服务器返回的数据类型。  
  18.            type : "post", //  请求方式 POST或GET  
  19.            contentType:"application/json", //  发送信息至服务器时的内容编码类型  
  20.            // 发送到服务器的数据。  
  21.            data:JSON.stringify({id : 1, name : "Spring MVC企业应用实战"}),  
  22.            async:  true , // 默认设置下,所有请求均为异步请求。如果设置为false,则发送同步请求  
  23.            // 请求成功后的回调函数。  
  24.            success :function(data){  
  25.                console.log(data);  
  26.               $("#id").html(data.id);  
  27.               $("#name").html(data.name);  
  28.               $("#author").html(data.author);  
  29.            },  
  30.            // 请求出错时调用的函数  
  31.            error:function(){  
  32.                alert("数据发送失败");  
  33.            }  
  34.     });  
  35. }  
  36. </script>  
  37. </head>  
  38. <body>  
  39. 编号:<span id="id"></span><br>  
  40. 书名:<span id="name"></span><br>  
  41. 作者:<span id="author"></span><br>  
  42. </body>  
  43. </html>  

3.后端

 Book.Java

[java]  view plain  copy
  1. package com.bean;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. public class Book implements Serializable {  
  6.     private Integer id;  
  7.     private String name;  
  8.     private String author;  
  9.     public Integer getId() {  
  10.         return id;  
  11.     }  
  12.     public void setId(Integer id) {  
  13.         this.id = id;  
  14.     }  
  15.     public String getName() {  
  16.         return name;  
  17.     }  
  18.     public void setName(String name) {  
  19.         this.name = name;  
  20.     }  
  21.     public String getAuthor() {  
  22.         return author;  
  23.     }  
  24.     public void setAuthor(String author) {  
  25.         this.author = author;  
  26.     }  
  27.     @Override  
  28.     public String toString() {  
  29.         // TODO Auto-generated method stub  
  30.         return "Book [id=" + id + ", name=" + name + ", author=" + author + "]";  
  31.     }  
  32.       
  33. }  

BookController.java

[java]  view plain  copy
  1. package com.control;  
  2.   
  3. import javax.servlet.http.HttpServletResponse;  
  4.   
  5. import org.apache.commons.logging.Log;  
  6. import org.apache.commons.logging.LogFactory;  
  7. import org.springframework.stereotype.Controller;  
  8. import org.springframework.web.bind.annotation.RequestBody;  
  9. import org.springframework.web.bind.annotation.RequestMapping;  
  10.   
  11. import com.alibaba.fastjson.JSONObject;  
  12. import com.bean.Book;  
  13.   
  14. @Controller  
  15. @RequestMapping("/json")  
  16. public class BookController {  
  17.     private static final Log logger = LogFactory.getLog(BookController.class);  
  18.       
  19.     // @RequestBody根据json数据,转换成对应的Object  
  20.     @RequestMapping(value="/testRequestBody")  
  21.     public void setJson(@RequestBody Book book,HttpServletResponse response) throws Exception{  
  22.         // JSONObject-lib包是一个beans,collections,maps,java arrays和xml和JSON互相转换的包。  
  23.         // 使用JSONObject将book对象转换成json输出  
  24.         logger.info(JSONObject.toJSONString(book));  
  25.         book.setAuthor("海哥");  
  26.         response.setContentType("text/html;charset=UTF-8");  
  27.         // 将book对象转换成json写出到客户端  
  28.         response.getWriter().println(JSONObject.toJSONString(book));  
  29.     }  
  30. }  

4.截图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潇潇雨歇_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值