fastjson高版本默认不排序,现实现排序

场景:流水数据推送,一条数据中多个字段需要排序后生成签名,但是项目上发送端的fastjson版本是1.2.71,接收端是1.1.41(字段自动排序)

方法一:最后加入JSONArray的时候排序

JSONArray array = new JSONArray();
// 字段排序  data为实体类数据
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(data);
Map jsonMap = jsonObject.getInnerMap();
TreeMap treeMap = new TreeMap(jsonMap);
array.add(treeMap);

 补充:自己的第一次遇到这个问题时这样可以解决排序,第二次遇到的时候,同样的代码复制上去就是不行,版本啥的都一样但是就是生成签名不一样,最后发现是空格转换的问题:老版本在加入JSONArray的时候将空格转成了\u00A0,而高版本空格还是空格,所以生成的签名调用的时候一直错误。然后,手动转换:json数组toString()后,将空格替换成\u00A0就可以了。但是最后又试了一遍空格不手动转,又可以了,真的神奇。

下面两个方法借鉴:fastjson排序问题-如何改变fastjson的排序规则_一年e度的夏天的博客-CSDN博客_fastjson 排序 

方法二:利用注解@JSONField的ordinal属性指定字段的顺序。这个特性需要1.1.42以上版本。

@JSONField(ordinal = 1)
    @ApiModelProperty("车牌颜色")
    private String carColor;
    @JSONField(ordinal = 2)
    @ApiModelProperty("实收金额")
    private String chargeMoney;
// 最后会按照ordinal 的顺序

 方法三:如果上面一种方法不行,或者没有达到你的要求,那么下面的也可以了
也可以人为改变json串的名称

@JSONField(name = "a")
    @ApiModelProperty("车牌颜色")
    private String carColor;
    @JSONField(name = "b")
    @ApiModelProperty("实收金额")
    private String chargeMoney;
// 最后按照名称顺序排序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值