json 对象属性的输出顺序测试,fastJson 有序,jackson,gson无序(需代码中人工按约定来编码)接口数据签名规则

fastJson会根据对象的字段的首字母来排序。
而jackson,gson是根据对象的类中定义的属性的代码中的先后顺序输出。不会排序。

针对业务场景需要对接口中对象存在集合列表等,需要约定对象中的属性按字母升序来排序,而不是乱序。来做签名和验签。
否则“签名错误”,需要排查签名前和签名后的字符串对比。来发现差异。

package com.example.core.mydemo.json5;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson; import java.util.ArrayList;
import java.util.List; /**
* 测试券对象
*/
public class MyCouponIdObject {
private String sex;
private Integer orderType;
private String couponCode;
private String name; public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} private static final ObjectMapper MAPPER = new ObjectMapper(); public String getCouponCode() {
return couponCode;
} public void setCouponCode(String couponCode) {
this.couponCode = couponCode;
} public Integer getOrderType() {
return orderType;
} public void setOrderType(Integer orderType) {
this.orderType = orderType;
} public static void main(String[] args) {
MyCouponIdObject c1 = new MyCouponIdObject();
c1.setOrderType(1);
c1.setCouponCode("111");
c1.setName("Eric");
c1.setSex("男"); System.out.println("fastJson=" + JSON.toJSONString(c1)); try {
System.out.println("jackson=" + MAPPER.writeValueAsString(c1));
} catch (JsonProcessingException e) {
e.printStackTrace();
} System.out.println("gson=" + new Gson().toJson(c1)); /**
* fastJson={"couponCode":"111","orderType":1}
* jackson={"orderType":1,"couponCode":"111"}
* gson={"orderType":1,"couponCode":"111"}
*
* 新增两个字段后 output
* fastJson={"couponCode":"111","name":"Eric","orderType":1,"sex":"男"}
* jackson={"sex":"男","orderType":1,"couponCode":"111","name":"Eric"}
* gson={"sex":"男","orderType":1,"couponCode":"111","name":"Eric"}
* 发现:fastJson会根据字段的首字母来排序。
* 而jackson,gson是根据对象的类中定义的属性的先后顺序输出。
*/
}
}

json 对象属性的输出顺序测试,fastJson 有序,jackson,gson无序(需代码中人工按约定来编码)接口数据签名规则的更多相关文章

  1. ECMAScript5之JSON对象属性的遍历顺序

    测试浏览器 Chrome.Safari 一 键可以用parseInt解析成整数的,按数值升序顺序. var intObj = { '3.3' : 3.3, '2' : 222, '1' :111 } ...

  2. 指定JSON.toJSONString中实体类属性的输出顺序

    最近在使用JSON.toJSONString过程中出现实体类的属性与转换之前的顺序不一致 public static void main(String[] args) { Person person ...

  3. Method Resolve Order (MRO) - 类对象属性的解析顺序

    Method Resolve Order (MRO) - 类对象属性的解析顺序 Python 支持多重继承, 此时就需要解决按照何种顺序来解析属性的问题.类的继承关系在一个特殊的类属性中指定(__mr ...

  4. js JSON对象属性

    json对象是是一种用于原生json分析的对象,无法对其进行构造函数调用,用java术语 来说,它相当于能够直接使用类方法的工具类JSON对象的属性parse(text[,reviver]);对参数t ...

  5. C# 反射(GetType) 获取动态Json对象属性值的方法

    之前在开发一个程序,希望能够通过属性名称读取出属性值,但是由于那时候不熟悉反射,所以并没有找到合适的方法,做了不少的重复性工作啊! 然后今天我再上网找了找,被我找到了,跟大家分享一下. 其实原理并不复 ...

  6. artTemplate--使用artTemplate时,由于json对象属性有数字命名格式 导致调用报错 syntax error

    案例 今天在使用artTemplate做开发时,遇到一个比较奇葩的问题,就是使用json对象去获取值得时候,报如下错误: Template Error <temp> function an ...

  7. JAVA优先级队列元素输出顺序测试

    package code.test; import java.util.Comparator; import java.util.Iterator; import java.util.Priority ...

  8. artTemplate--使用artTemplate时,由于json对象属性有特殊格式 导致调用报错artTemplate,syntax error,Template Error

    我们首先看下面的代码 data = { "siteName" : "西部云谷二期17", "PM10" : "10017" ...

  9. easyui datagrid 绑定json对象属性的属性

    今天用easyui 的datagrid绑定数据时,后台提供的数据是实体类类型的,其中有一个实体类A的属性b是另一个实体类B类型的,而前台需要显示b的属性c,这下就悲剧了,前台没法直接绑定了,后来脑筋一 ...

  10. 将js对象转为json对象属性加上引号

    工具地址 http://js2json.mengxiangchaoren.com

随机推荐

  1. C# 获取指定文件夹中所有的文件(包括子文件夹的文件)

    有个需求中需要播放指定路径的声音,但你必须要有该路径的声音才可以播放,如果没有该文件则播放默认的声音,该方法用于初始化应用的时候获取指定目录的所有文件,便于后来播放声音的时判断路径是否存在. usin ...

  2. Ingress-Controller高可用方案及多租户场景(21)

    一.Ingress-controller高可用 Ingress Controller 是集群流量的接入层,对它做高可用非常重要,可以基于 keepalive 实现 nginx-ingress-cont ...

  3. STLINK/V2下载器接线方法

    一.ST-LINK ST-LINK产品如下图所示: ST-LINK接口定义如下图所示 ST-LINK与stm32接线 使用SW接法只需要四根线: STM32 ST-LINK VCC(3.3V) TVC ...

  4. Go-Zero从0到1实现微服务项目开发(二)

    前言 书接上回,继续更新GoZero微服务实战系列文章. 上一篇被GoZero作者万总点赞了,更文动力倍增,也建议大家先看巧一篇,欢迎粉丝股东们三连支持一波:Go-zero微服务快速入门和最佳实践(一 ...

  5. Codeforces Good Bye 2023

    A. 2023 正常签到. void solve() { int n, k, ok = 1; cin >> n >> k; int t = 2023; while(n --) ...

  6. Caused by: java.lang.ClassNotFoundException: org.apache.http.message.TokenParser

    写完程序启动不报错,执行时总是报错 java.lang.ClassNotFoundException: org.apache.http.message.TokenParser 认真检查代码没问题,试了 ...

  7. 一键自动化博客发布工具,chrome和firfox详细配置

    blog-auto-publishing-tools博客自动发布工具现在已经可以同时支持chrome和firefox了. 很多小伙伴可能对于如何进行配置和启动不是很了解,今天带给大家一个详细的保姆教程 ...

  8. 解决VMware Workstation 与 Device/Credential Guard不兼容

    参考文档 https://blog.csdn.net/lizhengze1117/article/details/106566060

  9. 数据结构单向链表——找到并输出倒数第k个结点的数据

    /********************************************************************************************** * fu ...

  10. 数据库—ER模型概念设计

    文章目录 ER模型的概念 如何画ER图 ER图转换为关系数据库 ER模型的概念 实体 画图时用方形表示 属性 用椭圆形表示 关系 用菱形表示 主键(主码) 在主属性下面画划线 外键(外码) 这里一般是 ...