前言
随着国密算法普及,接口json加签传输对字段顺序有要求.
处理代码
public static void main(String[] args) throws IllegalAccessException {
User user = new User();
user.setUserId("123214");
user.setUserName("张三");
user.setNickName("昵称");
user.setMobile("15677778888");
user.setEmail("");
user.setCreateTime(new Date());
System.out.println("排序前:" + JSONObject.toJSONString(user));
// 先将利用反射将java对象转换成有序的LinkedHashMap
LinkedHashMap<String, Object> map = beanToMap(user);
// 生成有序的JSONObject
JSONObject jsonObject = new JSONObject(new LinkedHashMap<>());
jsonObject.putAll(map);
System.out.println("排序后:" + jsonObject.toJSONString());
}
/**
* 对象转有序Map
*/
public static LinkedHashMap<String, Object> beanToMap(Object object) throws IllegalAccessException {
LinkedHashMap<String, Object> map = new LinkedHashMap<>();
Field[] fields = object.getClass().getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
map.put(field.getName(), field.get(object));
}
return map;
}
排序前:{"createTime":"2023-02-27 11:13:13.168","email":"","mobile":"15677778888","nickName":"昵称","userId":121321,"userName":"张三"}
排序后:{"userId":121321,"userName":"张三","nickName":"昵称","mobile":"15677778888","email":"","createTime":"2023-02-27 11:13:13.168"}