SpringMVC 4.1 整合fastjson

来源:互联网 发布:移动网络上h网解决办法 编辑:程序博客网 时间:2024/06/09 22:14

SpringMVC在@ResponseBody时,默认使用Jackson做json对象的序列化操作。相信很多人都知道只要引入jackson包,框架会自动实现功能

  1. <dependency>
  2. <groupId>com.fasterxml.jackson.core</groupId>
  3. <artifactId>jackson-databind</artifactId>
  4. <version>${jackson.version}</version>
  5. </dependency>

具体原因,可以参考我的另外一篇博客《SpringMVC重要接口(三)HttpMessageConverter》

那我们现在不用jackson,而去使用fastjson,在我们引入依赖后

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>fastjson</artifactId>
  4. <version>${alibaba.fastjson.version}</version>
  5. </dependency>

别想当然SpringMVC框架会帮你自动适配,这看代码就知道,我们还需要做如下事情

  1. <mvc:annotation-driven>
  2. <mvc:message-converters>
  3. <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4" p:supportedMediaTypes="application/json;charset=UTF-8"/>
  4. </mvc:message-converters>
  5. </mvc:annotation-driven>

这已经相当简单了,如果我们还考虑针对@ResponseBody使用jsonp,又要怎么做呢,之前我们有了解过加入如下就可以

  1. @Order(2)
  2. @ControllerAdvice
  3. public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice {
  4. public JsonpAdvice() {
  5. super("callback", "jsonp"); //指定jsonpParameterNames
  6. }
  7. }

但是这也是为jackson准备的,不信可以看看AbstractJsonpResponseBodyAdvice这个抽象类。


是否看到jackson关键词呢,O(∩_∩)O~

那不禁要问fastjson是否提供了相关类呢,答案是有的,那就是com.alibaba.fastjson.support.spring.FastJsonpResponseBodyAdvice

于是便有了如下配置

  1. <bean class="com.alibaba.fastjson.support.spring.FastJsonpResponseBodyAdvice" />

与此同时,之前的转换器,将不再适用,需要另外一个专门为jsonp准备的,并且也是支持json的

  1. <mvc:annotation-driven>
  2. <mvc:message-converters>
  3. <bean class="com.alibaba.fastjson.support.spring.FastJsonpHttpMessageConverter4" p:supportedMediaTypes="application/json;charset=UTF-8"/>
  4. </mvc:message-converters>
  5. </mvc:annotation-driven>

原创粉丝点击