`

在springmvc中解决FastJson循环引用的问题

阅读更多

          我们先来看一个例子:

         

package com.elong.bms;

import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;

import com.alibaba.fastjson.JSON;

public class Test {
  public static void main(String[] args) {
    Map<String, Student> maps = new HashMap<String, Student>();
    Student s1 = new Student("s1", 16);

    maps.put("s1", s1);
    maps.put("s2", s1);

    byte[] bytes = JSON.toJSONBytes(maps);

    System.out.println(new String(bytes));
  }
}

   输出:

 

   

{"s1":{"age":16,"name":"s1"},"s2":{"$ref":"$.s1"}}

    

 

   可以看到,这个json如果发到前端是无法使用的,幸好FastJson提供了解决办法,我们来看下,解决办法为禁用循环引用检测,代码如下:

   

package com.elong.bms;

import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;

public class Test {
  public static void main(String[] args) {
    Map<String, Student> maps = new HashMap<String, Student>();
    Student s1 = new Student("s1", 16);

    maps.put("s1", s1);
    maps.put("s2", s1);
    
    SerializerFeature feature = SerializerFeature.DisableCircularReferenceDetect;

    byte[] bytes = JSON.toJSONBytes(maps,feature);

    System.out.println(new String(bytes));
  }
}

 

 

     输出如下:

 

{"s1":{"age":16,"name":"s1"},"s2":{"age":16,"name":"s1"}}

 

 

    问题是如果我们在spring mvc中使用的时候,需要将SerializerFeature注入到MessageConverter里面,

     FastJsonHttpMessageConverter

   

    但是SerializerFeature是一个enum类型的,又是一个array,考虑到大部分人对这个不熟悉,直接上代码了。

   

<bean id="jsonConverter"
     class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
      <property name="supportedMediaTypes" value="application/json;charset=UTF-8"/>
      <property name="features">
        <array value-type="com.alibaba.fastjson.serializer.SerializerFeature">
           <value>DisableCircularReferenceDetect</value>
        </array>
      </property>
   </bean>
   <bean id="DisableCircularReferenceDetect" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
      <property name="staticField" value="com.alibaba.fastjson.serializer.SerializerFeature.DisableCircularReferenceDetect"></property>
   </bean>

 

     

分享到:
评论

相关推荐

    详解在springmvc中解决FastJson循环引用的问题

    FastJson是阿里巴巴开源的一款高性能的JSON处理工具,广泛应用于Java应用程序中,特别是...通过上述配置方法,开发者可以有效地解决在Spring MVC中使用FastJson时遇到的循环引用问题,确保应用的健壮性和数据的正确性。

    springmvc+fastjson demo

    在"springmvc+fastjson demo"中,这个项目演示了如何在 Spring MVC 应用中集成并使用 Fastjson。以下是一些关于这个主题的关键知识点: 1. **Spring MVC 概述**:Spring MVC 通过 DispatcherServlet 接收 HTTP 请求...

    SpringMVC+fastjson+Swagger集成示例源码

    在IT行业中,SpringMVC、Fastjson和Swagger是三个非常重要的技术组件,它们分别用于构建Web应用程序、数据序列化和API文档化。本示例源码整合了这三个工具,为开发者提供了一个高效、易用的开发环境。让我们深入探讨...

    springmvc 配置fastjson

    Fastjson 是阿里巴巴开源的一个高性能的JSON库,它...然而,需要注意的是,虽然Fastjson在性能上表现出色,但在安全方面存在一些潜在问题,因此在生产环境中使用时,建议定期关注Fastjson的安全更新,确保其安全性。

    springMVC整合FastJson实现RestFul风格API

    本文将详细介绍如何在Spring MVC项目中整合FastJson,实现RESTful风格的API。 首先,我们需要在项目中引入Spring MVC和FastJson的相关依赖。在Maven的pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.spring...

    SpringMVC配合Fastjson的内存马利用与分析1

    在 SpringMVC 框架中,控制器(Controller)扮演着核心角色,负责处理用户请求并返回响应。控制器的实现通常使用 @Controller 注解,并且使用 @RequestMapping 注解来映射请求路径。例如: ```java @Controller ...

    springMVC解决中文乱码

    解决 SpringMVC 中的中文乱码问题可以通过多种方法来实现,包括在 web.xml 文件中配置字符编码、使用注解配置字符编码、使用 CharacterEncodingFilter 或者自定义 Filter 等。这些方法都可以有效地解决中文乱码问题...

    SpringMvc+mybatis+fastJson+druid+resteasy...

    开发工具采用IDEA,用maven构建的项目,框架采用SpringMVC,数据库采用mysql与mybatis配合,数据格式采用阿里巴巴工具fastJson,数据源druid,另外还添加了resteasy中的功能

    springMVC整合FastJson实现RestFul风格API涉及jar包

    本教程将详细介绍如何在Spring MVC项目中整合FastJson,以便实现RESTful风格的API。 首先,理解RESTful风格的API至关重要。REST(Representational State Transfer,表述性状态转移)是一种网络应用程序的设计风格...

    SPRINGMVC 406问题解决方案

    如果以上解决方案无法解决问题,可以尝试其他解决方案,例如将 URL 模式改为 `/rest/*`,或在 web.xml 文件中添加过滤器等。 SPRINGMVC 406 问题的解决方案主要包括添加 Jackson 依赖项、启用注解标签、使用 @...

    springmvc fastjson 反序列化时间格式化方法(推荐)

    接下来,在Spring MVC的配置文件(如`springMVC.xml`)中,替换原来的`FastJsonHttpMessageConverter`实例为我们的自定义类`JsonHttpMessageConverter`,并设置支持的媒体类型及序列化特性: ```xml &lt;!-- 替换...

    springmvc4+spring4+hibernate5.1.3+二级缓存ehcache+fastjson配置

    在IT领域,尤其是在Java Web开发中,`SpringMVC`、`Spring`、`Hibernate`以及`Ehcache`和`Fastjson`是常见的技术组件,它们分别在不同的层面上发挥着关键作用。以下是这些技术的详细介绍: 1. **SpringMVC**: ...

    SpringMVC中后台转换json格式

    本文将详细介绍如何在SpringMVC中后台转换JSON格式,以解决406错误问题。 406错误通常发生在客户端发送了Accept头,表明它期望接收某种特定类型的数据,但服务器无法提供这种类型的数据。在Ajax请求中,这个Accept...

    SpringMVC中文教程

    - **社区讨论**:加入Spring相关的技术社区,与其他开发者交流经验和解决问题。 综上所述,SpringMVC是一种强大的Web开发框架,通过对Spring框架的学习和掌握,开发者可以构建出高性能、可维护的Web应用程序。希望...

    防止SpringMVC拦截器拦截js等静态资源文件的解决方法

    在本文中,我们讨论了三种解决SpringMVC拦截器拦截静态资源文件的方法,并对这些方法的优劣进行了分析。 方案一是在拦截器中排除静态资源路径。在SpringMVC的配置文件中(通常是spring-mvc.xml),可以通过配置元素...

    springMVC利用FastJson接口返回json数据相关配置详解

    而Fastjson则能够优雅地解决这个问题,无需额外的注解或配置。 在Spring MVC中集成Fastjson进行JSON响应的配置相当简单。首先,需要在Spring的配置文件中启用默认的注解驱动 (`mvc:annotation-driven`),然后在`...

    SpringMVC+Mybatis框架

    在SpringMVC中,Fastjson常用于将Java对象转换为JSON格式的响应数据,提供给前端使用。它的性能优异,且使用简单,极大地提高了开发效率。 4. **Druid连接池** Druid是阿里巴巴开源的数据库连接池组件,它不仅提供...

    ssm-springMVC-整合Quartz(解决了无法注入service问题).doc

    ssm-springMVC-整合Quartz(解决了无法注入service问题).doc

    浅谈SpringMVC HandlerInterceptor诡异问题排查

    本文将主要介绍如何排查SpringMVC HandlerInterceptor中的诡异问题,解决问题的思路和方法,并对相关的源代码进行分析和解释。 一、问题发现 在进行压测时,发现有一些接口时好时坏,即使是同一个用户,在不同的...

Global site tag (gtag.js) - Google Analytics