java实现对实体类及JsonObject内部按ASCII码表排序输出

需求:将所有非空参数值的参数按照参数名 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();
	}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值