fastjson2 icon indicating copy to clipboard operation
fastjson2 copied to clipboard

[BUG] 2.0.57版本 Could not write JSON: Attempt to get length of null array 给null或者给空的数组也不行

Open artillerymans opened this issue 7 months ago • 7 comments

问题描述

Caused by: java.io.IOException: Could not write JSON: Attempt to get length of null array 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W at com.alibaba.fastjson2.support.retrofit.Retrofit2ConverterFactory$RequestBodyConverter.convert(Retrofit2ConverterFactory.java:139) 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W at com.alibaba.fastjson2.support.retrofit.Retrofit2ConverterFactory$RequestBodyConverter.convert(Retrofit2ConverterFactory.java:113) 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W at retrofit2.ParameterHandler$Body.apply(ParameterHandler.java:438) 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W ... 19 more 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W Caused by: java.lang.NullPointerException: Attempt to get length of null array 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W at com.alibaba.fastjson2.writer.ObjectWriterBaseModule$WriterAnnotationProcessor.getFieldInfo(ObjectWriterBaseModule.java:311) 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W at com.alibaba.fastjson2.writer.ObjectWriterProvider.getFieldInfo(ObjectWriterProvider.java:235) 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W at com.alibaba.fastjson2.writer.ObjectWriterCreator.creteFieldWriter(ObjectWriterCreator.java:147) 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W at com.alibaba.fastjson2.writer.ObjectWriterCreator.lambda$createObjectWriter$1$com-alibaba-fastjson2-writer-ObjectWriterCreator(ObjectWriterCreator.java:377) 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W at com.alibaba.fastjson2.writer.ObjectWriterCreator$$ExternalSyntheticLambda1.accept(D8$$SyntheticClass:0) 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W at com.alibaba.fastjson2.util.BeanUtils.declaredFields(BeanUtils.java:324) 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W at com.alibaba.fastjson2.util.BeanUtils.declaredFields(BeanUtils.java:255) 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W at com.alibaba.fastjson2.writer.ObjectWriterCreator.createObjectWriter(ObjectWriterCreator.java:374) 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W at com.alibaba.fastjson2.writer.ObjectWriterProvider.getObjectWriterInternal(ObjectWriterProvider.java:464) 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W at com.alibaba.fastjson2.writer.ObjectWriterProvider.getObjectWriter(ObjectWriterProvider.java:340) 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W at com.alibaba.fastjson2.JSONWriter.getObjectWriter(JSONWriter.java:555) 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W at com.alibaba.fastjson2.writer.FieldWriterObject.getObjectWriterVoid(FieldWriterObject.java:154) 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W at com.alibaba.fastjson2.writer.FieldWriterObject.getObjectWriter(FieldWriterObject.java:76) 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W at com.alibaba.fastjson2.writer.FieldWriterObject.writeInternal(FieldWriterObject.java:351) 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W at com.alibaba.fastjson2.writer.FieldWriterObject.write(FieldWriterObject.java:247) 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W at com.alibaba.fastjson2.writer.ObjectWriterAdapter.write(ObjectWriterAdapter.java:312) 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W at com.alibaba.fastjson2.writer.FieldWriterList.writeList(FieldWriterList.java:378) 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W at com.alibaba.fastjson2.writer.FieldWriterListMethod.write(FieldWriterListMethod.java:79) 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W at com.alibaba.fastjson2.writer.ObjectWriter6.write(ObjectWriter6.java:80) 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W at com.alibaba.fastjson2.writer.FieldWriterList.writeList(FieldWriterList.java:378) 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W at com.alibaba.fastjson2.writer.FieldWriterListMethod.write(FieldWriterListMethod.java:79) 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W at com.alibaba.fastjson2.writer.ObjectWriterAdapter.write(ObjectWriterAdapter.java:312) 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W at com.alibaba.fastjson2.JSON.toJSONBytes(JSON.java:3517) 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W at com.alibaba.fastjson2.support.retrofit.Retrofit2ConverterFactory$RequestBodyConverter.convert(Retrofit2ConverterFactory.java:130) 2025-05-09 10:51:42.682 6152-6152 System.err com.txc.mms.pad W ... 21 more

相关日志输出

请复制并粘贴任何相关的日志输出。

附加信息

如果你还有其他需要提供的信息,可以在这里填写(可以提供截图、视频等)。

artillerymans avatar May 09 '25 02:05 artillerymans

使用转换器 GsonConverterFactory 不会, 使用fastjson2-extension 2.0.57版本中的 Retrofit2ConverterFactory 会出现上面错误

artillerymans avatar May 09 '25 03:05 artillerymans

你好,方便给一下能重现该问题的代码吗?

jujn avatar May 09 '25 04:05 jujn

bean数据体吗?

你好,方便给一下能重现该问题的代码吗?

artillerymans avatar May 09 '25 05:05 artillerymans

给一下简易版的,能大致重现这个问题的代码就行

jujn avatar May 09 '25 05:05 jujn

( id=205, sku=ND1-1, batch_no=BVFH22222, brand=ND1, check_date=2025-05-09, sample_date=2025-05-09, size_id=1, version_id=40, version_name=Joe测试专用, reagent_id=1, line_id=1, supplier_id=99, supplier_name=佛山ORG, check_user_id=153, check_user_name=joe_pro, check_sign=null, check_ret=3, recheck_sign=null, status=0, r emark=, checkinfo=[ CheckInfoIntimate( id=426, batch_no=BVFH22222, check_json=[ CheckJsonIntimate( key=1, pack_no=1, electric=, open=null, weld_seam=, code=, end=, exterior=0, check_ret=, isEnable=true, quality=UNKNOWN, version_id=40, version_no=v100, version_name=Joe测试专用 ), CheckJsonIntimate( key=2, pack_no=2, electric=, open=null, weld_seam=, code=, end=, exterior=0, check_ret=, isEnable=true, quality=UNKNOWN, version_id=40, version_no=v100, version_name=Joe测试专用 ), CheckJsonIntimate( key=3, pack_no=3, electric=, open=null, weld_seam=, code=, end=, exterior=, check_ret=, isEnable=true, quality=UNKNOWN, version_id=40, version_no=v100, version_name=Joe测试专用 ), CheckJsonIntimate( key=4, pack_no=4, electric=, open=null, weld_seam=, code=, end=, exterior=0, check_ret=2147483647, isEnable=true, quality=UNKNOWN, version_id=40, version_no=v100, version_name=Joe测试专用 ), CheckJsonIntimate( key=5, pack_no=5, electric=, open=null, weld_seam=, code=, end=, exterior=, check_ret=, isEnable=true, quality=UNKNOWN, version_id=40, version_no=v100, version_name=Joe测试专用 ), CheckJsonIntimate( key=6, pack_no=6, electric=, open=null, weld_seam=, code=, end=, exterior=, check_ret=, isEnable=true, quality=UNKNOWN, version_id=40, version_no=v100, version_name=Joe测试专用 ), CheckJsonIntimate(key=7, pack_no=7, electric=, open=null, weld_seam=, code=, end=, exterior=1, check_ret=, isEnable=true, quality=UNKNOWN, version_id=40, version_no=v100, version_name=Joe测试专用) ], check_time=11:11, print_factor_id=101, print_factor=佛山宝印 ), CheckInfoIntimate(id=427, batch_no=BVFH22222, check_json=[ CheckJsonIntimate(key=1, pack_no=8, electric=, open=null, weld_seam=, code=, end=, exterior=, check_ret=, isEnable=true, quality=UNKNOWN, version_id=40, version_no=v100, version_name=Joe测试专用), CheckJsonIntimate(key=2, pack_no=9, electric=, open=null, weld_seam=, code=, end=, exterior=, check_ret=, isEnable=true, quality=UNKNOWN, version_id=40, version_no=v100, version_name=Joe测试专用) ], check_time=11:16, print_factor_id=101, print_factor=佛山宝印) ], weld_seam_ret=1, electric_ret=1, code_ret=1, end_ret=1, open_ret=null, files=null )

实体定义: `@Keep data class SaveIntimateRequestBody( val id: Int? = null, //单据ID 新增不传,编辑要传 val sku: String? = null, //产品类型 ND1-1 普通型 ND1-2 强化型 ND2-1 战马灌装 ND2-2 战马瓶装 val batch_no: String? = null, //生产批号 val brand: String? = null, //产品品牌 ND1 红牛 ND2 战马 val check_date: String? = null, //检测日期 val sample_date: String? = null, //样品日期 val size_id: Int? = null, //空罐尺寸 val version_id: Int? = null, //版本ID val version_name: String? = null, //版本名称 val reagent_id: String? = null, // 检测试剂id val line_id: Int? = null,// 空罐线别id, val supplier_id: Int? = null,// 供应商id, val supplier_name: String? = null,// 供应商名称, val check_user_id: Int? = null,// 检测员ID, val check_user_name: String? = null,// 检测员名称, val check_sign: String? = null,// 检验员签字 提审必传 val check_ret: Int? = null,// 检验结果 0 不及格 1及格 提审必传 val recheck_sign: String? = null, // 复核员签名 审核必传 val status: Int? = null,// 单据状态 0 暂存 1待审核 2已审核 3审核不通过 val remark: String? = null,// 备注 val checkinfo: List<CheckInfoIntimate>? = null, val weld_seam_ret: Int? = null, //"焊缝完整性实验检测结果 0 不及格 1及格", val electric_ret: Int? = null, //电流检测结果 0 不及格 1及格", val code_ret: Int? = null, // "墨码检测结果(普通型) 0 不及格 1及格", val end_ret: Int? = null, //底盖蓝底检测结果(普通型) 0 不及格 1及格", val open_ret: Int? = null, //"启破力检测结果(强化型) 0 不及格 1及格", val files: List<FilesIntimate>? = emptyList() //文件信息 ) : BaseProcess()

@Parcelize data class FilesIntimate( val file_name: String? = null, //"文件名", val file_url: String? = null, //"文件链接", val note: String? = null, //备注 val id: Int? = null, val oid: Int? = null, val download_num: Int? = null, val ct_uid: Int? = null, val up_uid: Int? = null, val create_time: String? = null, val update_time: String? = null, val ct_name: String? = null, val order_id: Int? = null, ) : Parcelable

data class CheckInfoIntimate( val id: Int? = null, //"检验信息ID 新增不传 编辑要传" val batch_no: String? = null, //报告单ID val check_json: List<CheckJsonIntimate?>? = null, //检验信息 val check_time: String? = null, // "检测时间", val print_factor_id: Int? = null, //"彩印铁厂家ID", val print_factor: String? = null, //"彩印铁厂家" )

data class CheckJsonIntimate( val key: Int? = null, //单元 val pack_no: String? = null, //包号 val electric: String? = null, //内涂膜质量 val open: String? = null, //启破力 val weld_seam: String? = null, //焊缝完整性实验检测 val code: String? = null, //墨码试机 val end: String? = null, //底盖蓝底检测 val exterior: String? = null, //外观检测 /外围的是Int 内部的String 没有填写的时候传 空字符串/ val check_ret: String? = "", /是否可以编辑/ val isEnable: Boolean = true, val quality: QualityInspectionStatus? = null,

val version_id: String? = null, //版本ID
val version_no: String? = null, //版本号
val version_name: String? = null, //版本名称

)` 场景: retrofit 发起一个post的请求

artillerymans avatar May 10 '25 06:05 artillerymans

Kotlin版本麻烦提供一下

yanxutao89 avatar Jun 12 '25 07:06 yanxutao89

Kotlin版本麻烦提供一下

1.7.20

artillerymans avatar Jun 12 '25 07:06 artillerymans