我们先来看一个例子:
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>
相关推荐
FastJson是阿里巴巴开源的一款高性能的JSON处理工具,广泛应用于Java应用程序中,特别是...通过上述配置方法,开发者可以有效地解决在Spring MVC中使用FastJson时遇到的循环引用问题,确保应用的健壮性和数据的正确性。
在"springmvc+fastjson demo"中,这个项目演示了如何在 Spring MVC 应用中集成并使用 Fastjson。以下是一些关于这个主题的关键知识点: 1. **Spring MVC 概述**:Spring MVC 通过 DispatcherServlet 接收 HTTP 请求...
在IT行业中,SpringMVC、Fastjson和Swagger是三个非常重要的技术组件,它们分别用于构建Web应用程序、数据序列化和API文档化。本示例源码整合了这三个工具,为开发者提供了一个高效、易用的开发环境。让我们深入探讨...
Fastjson 是阿里巴巴开源的一个高性能的JSON库,它...然而,需要注意的是,虽然Fastjson在性能上表现出色,但在安全方面存在一些潜在问题,因此在生产环境中使用时,建议定期关注Fastjson的安全更新,确保其安全性。
本文将详细介绍如何在Spring MVC项目中整合FastJson,实现RESTful风格的API。 首先,我们需要在项目中引入Spring MVC和FastJson的相关依赖。在Maven的pom.xml文件中添加以下依赖: ```xml <groupId>org.spring...
在 SpringMVC 框架中,控制器(Controller)扮演着核心角色,负责处理用户请求并返回响应。控制器的实现通常使用 @Controller 注解,并且使用 @RequestMapping 注解来映射请求路径。例如: ```java @Controller ...
解决 SpringMVC 中的中文乱码问题可以通过多种方法来实现,包括在 web.xml 文件中配置字符编码、使用注解配置字符编码、使用 CharacterEncodingFilter 或者自定义 Filter 等。这些方法都可以有效地解决中文乱码问题...
开发工具采用IDEA,用maven构建的项目,框架采用SpringMVC,数据库采用mysql与mybatis配合,数据格式采用阿里巴巴工具fastJson,数据源druid,另外还添加了resteasy中的功能
本教程将详细介绍如何在Spring MVC项目中整合FastJson,以便实现RESTful风格的API。 首先,理解RESTful风格的API至关重要。REST(Representational State Transfer,表述性状态转移)是一种网络应用程序的设计风格...
如果以上解决方案无法解决问题,可以尝试其他解决方案,例如将 URL 模式改为 `/rest/*`,或在 web.xml 文件中添加过滤器等。 SPRINGMVC 406 问题的解决方案主要包括添加 Jackson 依赖项、启用注解标签、使用 @...
接下来,在Spring MVC的配置文件(如`springMVC.xml`)中,替换原来的`FastJsonHttpMessageConverter`实例为我们的自定义类`JsonHttpMessageConverter`,并设置支持的媒体类型及序列化特性: ```xml <!-- 替换...
在IT领域,尤其是在Java Web开发中,`SpringMVC`、`Spring`、`Hibernate`以及`Ehcache`和`Fastjson`是常见的技术组件,它们分别在不同的层面上发挥着关键作用。以下是这些技术的详细介绍: 1. **SpringMVC**: ...
本文将详细介绍如何在SpringMVC中后台转换JSON格式,以解决406错误问题。 406错误通常发生在客户端发送了Accept头,表明它期望接收某种特定类型的数据,但服务器无法提供这种类型的数据。在Ajax请求中,这个Accept...
- **社区讨论**:加入Spring相关的技术社区,与其他开发者交流经验和解决问题。 综上所述,SpringMVC是一种强大的Web开发框架,通过对Spring框架的学习和掌握,开发者可以构建出高性能、可维护的Web应用程序。希望...
在本文中,我们讨论了三种解决SpringMVC拦截器拦截静态资源文件的方法,并对这些方法的优劣进行了分析。 方案一是在拦截器中排除静态资源路径。在SpringMVC的配置文件中(通常是spring-mvc.xml),可以通过配置元素...
而Fastjson则能够优雅地解决这个问题,无需额外的注解或配置。 在Spring MVC中集成Fastjson进行JSON响应的配置相当简单。首先,需要在Spring的配置文件中启用默认的注解驱动 (`mvc:annotation-driven`),然后在`...
在SpringMVC中,Fastjson常用于将Java对象转换为JSON格式的响应数据,提供给前端使用。它的性能优异,且使用简单,极大地提高了开发效率。 4. **Druid连接池** Druid是阿里巴巴开源的数据库连接池组件,它不仅提供...
ssm-springMVC-整合Quartz(解决了无法注入service问题).doc
springMVC 中文开发指南,适合新手,适合初学者!