Json中key值不统一解析异常——@SerializedName注解容错妙用

现在前后端通信交互普遍采用的是JSON格式数据传输,因此就需要解析JSON数据了。而如果前后端沟通不多,难免造成数据格式不统一解析失败。在不想后台改动太多的前提下,这时候就需要前端去适应后台了,使用@SerializedName可以巧妙的解决这个问题。

我一般都是使用Gson解析json数据,代码如下

  //将流转换成字符串(工具类封装)
 String json = StreamUtils.stream2String(is);
 ApkCheckCodeBean apkCheckCodeBean = new Gson().fromJson(json, ApkCheckCodeBean.class);

解析的数据实体类Bean

public class ApkCheckCodeBean {

    /**
     * downloadUrl : http://xxxxxx.apk
     * versionCode : 3
     * versionDes : 1.1.3版本发布了
     * versionName : 1.1.3
     */
   //在此添加后台可能返回的异常json key别名
    @SerializedName(value = "downloadUrl", alternate = {"downloadurl", "DownloadUrl", "Downloadurl"})
    private String downloadUrl;
    @SerializedName(value = "versionCode", alternate = {"versioncode", "VersionCode", "Versioncode"})
    private String versionCode;
    @SerializedName(value = "versionDes", alternate = {"VersionDes", "versiondes", "Versiondes"})
    private String versionDes;
    @SerializedName(value = "versionName", alternate = {"VersionName", "versionname", "Versionname"})
    private String versionName;

    public String getDownloadUrl() {
        return downloadUrl;
    }

    public void setDownloadUrl(String downloadUrl) {
        this.downloadUrl = downloadUrl;
    }

    public String getVersionCode() {
        return versionCode;
    }

    public void setVersionCode(String versionCode) {
        this.versionCode = versionCode;
    }

    public String getVersionDes() {
        return versionDes;
    }

    public void setVersionDes(String versionDes) {
        this.versionDes = versionDes;
    }

    public String getVersionName() {
        return versionName;
    }

    public void setVersionName(String versionName) {
        this.versionName = versionName;
    }
}

在@SerializedName(value = "downloadUrl", alternate = {"downloadurl", "DownloadUrl", "Downloadurl"})中有两个属性设置,value="默认key",alternate="别名key1,别名key2...",别名可以有多个,多个别名用“ , ”分隔。如此便降低了数据别名不统一造成的解析异常概率,解决由于key不一致拿不到value值的问题。

你可能感兴趣的:(Json中key值不统一解析异常——@SerializedName注解容错妙用)