You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android平台Retrofit框架下如何调整JSON序列化的键值顺序

解决方案

问题根本原因

Gson 默认开启了JSON字段按字母升序序列化的规则,所以生成的JSON顺序和你DataModel类中定义的字段顺序不一致。

方法1:使用@SerializedName注解指定排序(最简便,适配所有Gson 2.4+版本)

@SerializedName的order属性用于控制字段序列化的优先级,数值越小,字段在JSON中出现的位置越靠前,所有字段默认order值为0。
你只需要修改DataModel类的parameterid字段,给它设置比0小的order值即可让它排在第一位:

public class DataModel {
    private String slotno;
    // 设置order为-1,比其他字段默认的0更小,会排在首位
    @SerializedName(value = "parameterid", order = -1)
    private String parameterid;
    private String batteryid;
    private String voltage;
    private String current;
    private String power;
    private String alarm;
    private String fault;

    // 原有构造方法、getter、setter保持不变
}

如果你需要所有字段都严格按照你定义的顺序排列,只需要给每个字段按顺序设置递增的order值即可:

public class DataModel {
    @SerializedName(value = "slotno", order = 1)
    private String slotno;
    @SerializedName(value = "parameterid", order = 0) // 最小的值排第一
    private String parameterid;
    @SerializedName(value = "batteryid", order = 2)
    private String batteryid;
    @SerializedName(value = "voltage", order = 3)
    private String voltage;
    @SerializedName(value = "current", order = 4)
    private String current;
    @SerializedName(value = "power", order = 5)
    private String power;
    @SerializedName(value = "alarm", order = 6)
    private String alarm;
    @SerializedName(value = "fault", order = 7)
    private String fault;

    // 原有构造方法、getter、setter保持不变
}

方法2:自定义Gson实例关闭默认排序规则

如果你不想修改实体类的注解,且项目使用Gson 2.8.6及以上版本,可以自定义Gson实例,关闭默认的字母排序规则,然后将自定义的Gson实例传入GsonConverterFactory即可:

// 自定义Gson实例
Gson gson = new GsonBuilder()
        .setFieldOrderingStrategy((field1, field2) -> {
            // 优先把parameterid放在第一位
            if (field1.getName().equals("parameterid")) return -1;
            if (field2.getName().equals("parameterid")) return 1;
            // 其余字段按类中声明的顺序排列
            return 0;
        })
        .create();

// 传入自定义的gson实例创建Retrofit
Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("http://103.87.174.181/BatteryStation/api/BatteryStationAPI/")
        .addConverterFactory(GsonConverterFactory.create(gson))
        .build();

如果你的项目Gson版本低于2.8.6,推荐优先使用方法1,兼容性更强。

注意:JSON官方规范本身不要求字段的顺序,只有极少数兼容性差的老旧服务端会强制校验字段顺序,非必要场景不建议自定义序列化顺序。

内容的提问来源于stack exchange,提问作者Niranjan Adhav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 17:57:01