Gson解析Long为Null和空异常处理

2024-05-10 14:18
文章标签 异常 处理 解析 long null gson

本文主要是介绍Gson解析Long为Null和空异常处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

起因
对于一些不规范的json,使用gson解析经常会抛出各种异常导致应用功能失效甚至崩溃
解决
我们希望在接口返回的json异常时,也能解析成功,空值对应的转换为默认值,如:keyId=0;
首先我们希望在数据生成时就能避免出现异常字段,后台帮我们矫正相应字段,其次我们客户端也要针对这种情况进行处理,确保遇到这种情况时,应用能正常运行

通过实现Gson的JsonSerializer接口和JsonDeserializer,即序列化和反序列化接口可以达到该目的

  1. Long类型
public class LongDefault0Adapter implements JsonSerializer<Long>, JsonDeserializer<Long> {@Overridepublic Long deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)throws JsonParseException {try {if (json.getAsString().equals("") || json.getAsString().equals("null")) {           //定义为long类型,如果后台返回""或者null,则返回0return 0;}} catch (Exception ignore) {}try {return json.getAsLong();} catch (NumberFormatException e) {throw new JsonSyntaxException(e);}}@Overridepublic JsonElement serialize(Long src, Type typeOfSrc, JsonSerializationContext context) {return new JsonPrimitive(src);}
}
  1. Integer类型
public class IntegerDefault0Adapter implements JsonSerializer<Integer>, JsonDeserializer<Integer> {@Overridepublic Integer deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)throws JsonParseException {try {if (json.getAsString().equals("") || json.getAsString().equals("null")) {                //定义为int类型,如果后台返回""或者null,则返回0return 0;}} catch (Exception ignore) {}try {return json.getAsInt();} catch (NumberFormatException e) {throw new JsonSyntaxException(e);}}@Overridepublic JsonElement serialize(Integer src, Type typeOfSrc, JsonSerializationContext context) {return new JsonPrimitive(src);}
}
  1. Double类型
public class DoubleDefault0Adapter implements JsonSerializer<Double>, JsonDeserializer<Double> {@Overridepublic Double deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)             throws JsonParseException {try {if (json.getAsString().equals("") || json.getAsString().equals("null")) {          //定义为double类型,如果后台返回""或者null,则返回0.00return 0.00;}} catch (Exception ignore) {}try {return json.getAsDouble();} catch (NumberFormatException e) {throw new JsonSyntaxException(e);}}@Overridepublic JsonElement serialize(Double src, Type typeOfSrc, JsonSerializationContext context) {return new JsonPrimitive(src);}
}
  1. 使用
/*** 增加后台返回""和"null"的处理* 1.int=>0* 2.double=>0.00* 3.long=>0L** @return*/
public static Gson buildGson() {if (gson == null) {gson = new GsonBuilder().registerTypeAdapter(Integer.class, new IntegerDefault0Adapter()).registerTypeAdapter(int.class, new IntegerDefault0Adapter()).registerTypeAdapter(Double.class, new DoubleDefault0Adapter()).registerTypeAdapter(double.class, new DoubleDefault0Adapter()).registerTypeAdapter(Long.class, new LongDefault0Adapter()).registerTypeAdapter(long.class, new LongDefault0Adapter()).create();}return gson;
}

这篇关于Gson解析Long为Null和空异常处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/976673

相关文章

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

Python视频处理库VidGear使用小结

《Python视频处理库VidGear使用小结》VidGear是一个高性能的Python视频处理库,本文主要介绍了Python视频处理库VidGear使用小结,文中通过示例代码介绍的非常详细,对大家的... 目录一、VidGear的安装二、VidGear的主要功能三、VidGear的使用示例四、VidGea

Python结合requests和Cheerio处理网页内容的操作步骤

《Python结合requests和Cheerio处理网页内容的操作步骤》Python因其简洁明了的语法和强大的库支持,成为了编写爬虫程序的首选语言之一,requests库是Python中用于发送HT... 目录一、前言二、环境搭建三、requests库的基本使用四、Cheerio库的基本使用五、结合req

使用Python处理CSV和Excel文件的操作方法

《使用Python处理CSV和Excel文件的操作方法》在数据分析、自动化和日常开发中,CSV和Excel文件是非常常见的数据存储格式,ython提供了强大的工具来读取、编辑和保存这两种文件,满足从基... 目录1. CSV 文件概述和处理方法1.1 CSV 文件格式的基本介绍1.2 使用 python 内

使用Python实现批量访问URL并解析XML响应功能

《使用Python实现批量访问URL并解析XML响应功能》在现代Web开发和数据抓取中,批量访问URL并解析响应内容是一个常见的需求,本文将详细介绍如何使用Python实现批量访问URL并解析XML响... 目录引言1. 背景与需求2. 工具方法实现2.1 单URL访问与解析代码实现代码说明2.2 示例调用

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont