fastjson

fastjson数据返回配置

北城余情 提交于 2019-12-04 06:17:37
阿里的fastjson 包升级后,可能导致返回的json 数据,字段为null时不显示等问题 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.9.13</version> </dependency> @Configuration public class FastjsonConfiguration { @Bean public HttpMessageConverters fastjsonConverter() { FastJsonConfig fastJsonConfig = new FastJsonConfig(); //自定义格式化输出 fastJsonConfig.setSerializerFeatures(SerializerFeature.WriteNullStringAsEmpty, SerializerFeature.WriteNullNumberAsZero); FastJsonHttpMessageConverter4 fastjson = new FastJsonHttpMessageConverter4(); fastjson.setFastJsonConfig(fastJsonConfig); return new

FastJson稍微使用不当就会导致StackOverflow

谁说胖子不能爱 提交于 2019-12-04 06:12:58
摘自: https://www.cnblogs.com/hollischuang/p/11832947.html FastJson稍微使用不当就会导致StackOverflow GitHub 9.4k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 9.4k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 9.4k Star 的Java工程师成神之路 ,真的确定不来了解一下吗? 对于广大的开发人员来说,FastJson大家一定都不陌生。 FastJson(https://github.com/alibaba/fastjson)是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。 它具有速度快、使用广泛、测试完备以及使用简单等特点。但是,虽然有这么多优点,但是不代表着就可以随便使用,因为如果使用的方式不正确的话,就可能导致StackOverflowError。而StackOverflowError对于程序来说是无疑是一种灾难。 笔者在一次使用FastJson的过程中就遇到了这种情况,后来经过深入源码分析,了解这背后的原理。本文就来从情景再现看是抽丝剥茧,带大家看看坑在哪以及如何避坑。 缘由 FastJson可以帮助开发在Java

FastJson

一曲冷凌霜 提交于 2019-12-04 05:36:28
FastJson(https://github.com/alibaba/fastjson)是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。 学习文章:【1】 FastJson稍微使用不当就会导致StackOverflow 来源: https://www.cnblogs.com/2019wxw/p/11832992.html

FastJson稍微使用不当就会导致StackOverflow

六眼飞鱼酱① 提交于 2019-12-04 05:35:40
GitHub 9.4k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 9.4k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 9.4k Star 的Java工程师成神之路 ,真的确定不来了解一下吗? 对于广大的开发人员来说,FastJson大家一定都不陌生。 FastJson( https://github.com/alibaba/fastjson)是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。 它具有速度快、使用广泛、测试完备以及使用简单等特点。但是,虽然有这么多优点,但是不代表着就可以随便使用,因为如果使用的方式不正确的话,就可能导致StackOverflowError。而StackOverflowError对于程序来说是无疑是一种灾难。 笔者在一次使用FastJson的过程中就遇到了这种情况,后来经过深入源码分析,了解这背后的原理。本文就来从情景再现看是抽丝剥茧,带大家看看坑在哪以及如何避坑。 缘由 FastJson可以帮助开发在Java Bean和JSON字符串之间互相转换,所以是序列化经常使用的一种方式。 有很多时候,我们需要在数据库的某张表中保存一些冗余字段,而这些字段一般会通过JSON字符串的形式保存

fastjson自由:controller上指定active profile,让你想序列化什么字段就序列化什么字段

ⅰ亾dé卋堺 提交于 2019-12-04 03:31:01
一、前言 最近有个需求,其实这个需求以前就有,比如定义了一个vo,包含了10个字段, 在接口A里,要返回全部字段; 但是在接口B里呢,需要复用这个 vo, 但是只需要返回其中8个字段。 可能呢,有些同学会选择重新定义一个新的vo,但这样,会导致vo类数量特别多;你说,要是全部字段都返回吧,则会给前端同学造成困扰。 针对需要排除部分字段,希望能达到下面这样的效果: 1、在controller上指定一个profile 2、在profile要应用到的class类型中,在field上添加注解 3、请求接口,返回的结果,如下: 4、如果注释掉注解那两行,则效果如下: 针对仅需要包含部分字段,希望能达到下面的效果: 1、在controller上指定profile /** * 测试include类型的profile,这里指定了: * 激活profile为 includeProfile * User中,对应的field将会被序列化,其他字段都不会被序列化 */ @GetMapping("/test.do") @ActiveFastJsonProfileInController(profile = "includeProfile",clazz = User.class) public CommonMessage<User> test() { User user = new User(); user

1、Spring Boot——使用Java搭建SSM环境

此生再无相见时 提交于 2019-12-04 02:40:18
在学习Spring Boot之前先使用Java搭建一个SSM环境。因为在Spring Boot项目中,正常来说不存在XML配置,这是因为Spring Boot不推荐使用XML,注意,并非不支持。Spring Boot推荐开发者使用Java配置来搭建框架,Spring Boot中,大量的自动化配置都是通过Java配置来实现的,这一套实现方案,我们也可以自己做,即自己使用纯Java来搭建一个SSM环境,即在项目中,不存在任何XML配置,包括web.xml。 如果使用纯Java搭建SSM工程,要求tomcat版本必须7以上(实际上tomcat版本在7以上,servlet版本也是3.0以上,以前刚开始学习web的时候,要使用一个servlet,要在web.xml中注册一下才能用,除此之外还可以加一个注解@WebServlet,但是如果用的是tomcat6的话,它是没有这个注解的,7以上才有,而tomcat里面有servlet),servlet版本至少要3.0以上。 搭建步骤: 1、创建工程 创建一个普通的Maven工程,并添加SpringMVC的依赖。 (1)把新创建的工程打成一个war包,无需webapp目录和web.xml文件(可以不必创建web工程)。同时这里环境的搭建还需要用到Servlet,所以我们还需要引入Servlet的依赖(一定不能使用低版本的Servlet

JSON,全称:JavaScript Object Notation,作为一个常见的轻量级的数据交换格

偶尔善良 提交于 2019-12-03 21:29:25
JSON,全称:JavaScript Object Notation,作为一个常见的轻量级的数据交换格式,应该在一个程序员的开发生涯中是常接触的。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。 Java是面向对象的语言,所以我们更多的在项目中是以对象的形式处理业务的,但是在传输的时候我们却要将对象转换为 JSON 格式便于传输,而且 JSON 格式一般能解析为大多数的对象格式,而不在乎编程语言。 现在主流的对象与 JSON 互转的工具很多,我们主要介绍今天的主角,阿里巴巴的开源库 - Fastjson。Fastjson是一个Java库,可用于将Java对象转换为其JSON表示。它还可用于将JSON字符串转换为等效的Java对象。Fastjson可以处理任意Java对象,包括您没有源代码的预先存在的对象。 1 | 0 什么是 Fastjson? 阿里官方给的定义是, fastjson 是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。 2 | 0 Fastjson 的优点 速度快 fastjson相对其他JSON库的特点是快,从2011年fastjson发布1.1

【FastJSON】解决FastJson中“$ref 循环引用”的问题

旧城冷巷雨未停 提交于 2019-12-03 18:26:51
【需求与环境描述】 0、开发环境 SSH,EasyUI,MySQL 1、需求要求: (1)首先获取所有的贷款订单数据,即List <LoanOrder>。 (2)然后从单个贷款订单实体LoanOrder去访问贷款人实体Loaner的信息。 2、实体之间的关系描述 (1)LoanOrder实体与Loaner实体是双向的多对一和一对多关系。 (2)LoanOrder是“多方”,其中的关系属性为“private Loaner loaner”。 (3)Loaner是“一方”,其中的关系属性为“Set<LoanOrder> orders”。 3、代码示例 (1) 贷款订单LoanOrder代码 @Entity @Table(name = "t_bp_loan_order") public class LoanOrder implements java.io.Serializable { /*省略其他次要属性*/ private Loaner loaner; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "LOANER_ID") public Loaner getLoaner() { return this.loaner; } } (2) Loaner方代码 @Entity @Table(name = "t_bp_loaner")

JSON 数据重复 出现$ref

不想你离开。 提交于 2019-12-03 18:26:13
JSON 数据重复 出现$ref JSONArray 类型 如果我们往里面add数据的时候 如果数据相同,那么就会被替换成 $ref: 也就是被简化了 因为数据一样所直接 指向上一条数据 循环引用:当一个对象包含另一个对象时,fastjson就会把该对象解析成引用。引用是通过$ref标示的,下面介绍一些引用的描述 "$ref":".." 上一级 "$ref":"@" 当前对象,也就是自引用 "$ref":"$" 根对象 "$ref":"$.children.0" 基于路径的引用,相当于 root.getChildren().get(0) 例如下面这3个银行卡都是建行的,那么就会出现这个问题,因为bank信息完全一致 因为我们要在前端展示数据 所以这样肯定不对 ,那么如果解决呢 网上都说是加上SerializerFeature.DisableCircularReferenceDetect 1 首先把JSONArray 转成string 这个时候加上SerializerFeature.DisableCircularReferenceDetect JSONArray.toJSONString(userBankJsonArray, SerializerFeature.DisableCircularReferenceDetect) 2 因为之前是JSON格式的

解决js处理Long类型丢失精度的问题

时光总嘲笑我的痴心妄想 提交于 2019-12-03 18:26:03
项目中很多时候都会用到json,常用的有fastjson,Jackson等等这些,有时候为了统一,我们通常就会约定使用某一种。 不管使用哪种,Spring MVC返回个前段Long类型的数据时,js在获取数据时会丢失精度,从而造成数据的不准确,解决方式呢,就是在序列化时,会将Long类型的数据转化为String类型 在使用Spring MVC默认的Jackson时,我们可以这么做: @Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); ObjectMapper objectMapper = new ObjectMapper(); SimpleModule simpleModule = new SimpleModule(); simpleModule.addSerializer