java实现对实体类及JsonObject内部按ASCII码表排序输出
2018-02-06 10:20
1006 查看
需求:将所有非空参数值的参数按照参数名 ASCII 码从小到大排序(字典序),使用 URL 键值
对的格式(即 key1=value1&key2=value2…)拼接成字符串 stringA。
特别注意以下重要规则:
◆ 参数名 ASCII 码从小到大排序(字典序);
◆ 如果参数的值为空不参与签名;
以上需求对应的处理代码如下:这里使用反射读取实体类的属性值,做到可以通用。读取出值之后再放入map进行排序输出。
/**
* 反射拼接类的属性值
*
* @param clazz
* @param list
* @return
*/
public static String getAscOrderString(Class clazz, Object object) {
String rawString="";
Map<String, String> map=new HashMap<String, String>();
Field[] fs = clazz.getDeclaredFields();
for (int i = 0; i < fs.length; i++) {
Field field = fs[i];
field.setAccessible(true);
String valString;
try {
if( field.get(object)==null){
valString = "";
}else{
valString = field.get(object).toString();
}
map.put(field.getName(), valString);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Collection<String> keyset= map.keySet();
List list=new ArrayList<String>(keyset);
Collections.sort(list);
for(int i=0;i<list.size();i++){
if(i==(list.size()-1)){
if(!StringUtils.isEmpty(map.get(list.get(i)))){
rawString+=list.get(i)+"="+map.get(list.get(i));
}
}else{
if(!StringUtils.isEmpty(map.get(list.get(i)))){
rawString+=list.get(i)+"="+map.get(list.get(i))+"&";
}
}
}
return rawString;
}
要对JsonObject内部排序并输出jsonObject时: jsonObject可以直接转map,取出keySet排序后再依次插入LinkedHashMap中
//jsonObject 排序输出jsonObject字符串
public static String getAscString(JSONObject json) {
Map<String, String> jsonMap=json;
List<String> keys = new ArrayList<String>(jsonMap.keySet());
Collections.sort(keys);
LinkedHashMap<String, String> map=new LinkedHashMap<String, String>();
for(int i=0;i<keys.size();i++){
if(StringUtils.isNotEmpty(keys.get(i))){
map.put(keys.get(i), jsonMap.get(keys.get(i)));
}
}
JSONObject jsonObject=JSONObject.fromObject(map);
return jsonObject.toString();
}
对的格式(即 key1=value1&key2=value2…)拼接成字符串 stringA。
特别注意以下重要规则:
◆ 参数名 ASCII 码从小到大排序(字典序);
◆ 如果参数的值为空不参与签名;
以上需求对应的处理代码如下:这里使用反射读取实体类的属性值,做到可以通用。读取出值之后再放入map进行排序输出。
/**
* 反射拼接类的属性值
*
* @param clazz
* @param list
* @return
*/
public static String getAscOrderString(Class clazz, Object object) {
String rawString="";
Map<String, String> map=new HashMap<String, String>();
Field[] fs = clazz.getDeclaredFields();
for (int i = 0; i < fs.length; i++) {
Field field = fs[i];
field.setAccessible(true);
String valString;
try {
if( field.get(object)==null){
valString = "";
}else{
valString = field.get(object).toString();
}
map.put(field.getName(), valString);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Collection<String> keyset= map.keySet();
List list=new ArrayList<String>(keyset);
Collections.sort(list);
for(int i=0;i<list.size();i++){
if(i==(list.size()-1)){
if(!StringUtils.isEmpty(map.get(list.get(i)))){
rawString+=list.get(i)+"="+map.get(list.get(i));
}
}else{
if(!StringUtils.isEmpty(map.get(list.get(i)))){
rawString+=list.get(i)+"="+map.get(list.get(i))+"&";
}
}
}
return rawString;
}
要对JsonObject内部排序并输出jsonObject时: jsonObject可以直接转map,取出keySet排序后再依次插入LinkedHashMap中
//jsonObject 排序输出jsonObject字符串
public static String getAscString(JSONObject json) {
Map<String, String> jsonMap=json;
List<String> keys = new ArrayList<String>(jsonMap.keySet());
Collections.sort(keys);
LinkedHashMap<String, String> map=new LinkedHashMap<String, String>();
for(int i=0;i<keys.size();i++){
if(StringUtils.isNotEmpty(keys.get(i))){
map.put(keys.get(i), jsonMap.get(keys.get(i)));
}
}
JSONObject jsonObject=JSONObject.fromObject(map);
return jsonObject.toString();
}
相关文章推荐
- 简单封装Jackson,实现JSON String<->Java Object的Mapper.
- java实现十种常见内部排序
- Java学习-046-日志抓取合并后排序问题解决方案之 --- log4j 二次定制,实现日志输出添加延时10ms
- Java实现根据属性排序输出对象
- java实现List<Object>转List<实体类>,java实现Object转对象,java实现Object转实体类
- java实现JsonObject和Json字符串的转化
- 跟阿根一起学Java Web开发二:使用Ajax技术及XML与JSON实现输出
- 【Java实现】给出两个整型数组,将他们合并后从小到大排序并输出
- Java中将实现string到JSONObject的转换
- Java代码实现Map和Object互转及Map和Json互转
- java对List<Object>型列表进行排序(通过内部类对compare(**)方法重写)
- java中实现HashMap中的按照key的字典顺序排序输出
- java中实现HashMap中的按照key的字典顺序排序输出
- 简单封装Jackson,实现JSON String到Java Object的Mapper.
- java反射覆写toString方法实现输出实体类属性值
- java程序——用集合框架实现学生类的排序输出
- java实现读取一篇英文文章,统计其中每个单词出现的次数并排序输出
- java反射覆写toString方法实现输出实体类属性值
- java将JSON字符串转换为实体类对象,基于net.sf.json实现
- groovy/java自实现json解析器(2)JsonObject