近期在开发中遇到一个这样的问题,在做一个加密验签的功能时拦截器接收到JSON字符串的时候进行JSONObject转换时里面部分参数与传递过来的格式出现不一致乱序问题。导致签名加密异常。
跟踪fastjson源码,在com.alibaba.fastjson.parser.DefaultJSONParser 类发现:
else if (ch == '{') { // 减少嵌套,兼容android
lexer.nextToken();
final boolean parentIsArray = fieldName != null && fieldName.getClass() == Integer.class;
JSONObject input = new JSONObject(lexer.isEnabled(Feature.OrderedField));
在fastjson会进行Feature.OrderField的判断,如果在解析json的时候加上这一条属性,即可解决json解析后乱序的问题,具体代码如下:
JSONObject requestBody = JSONObject.parseObject(requestWrapper.getBody(),Feature.OrderedField);